Changeset - a5f0bc867edc
[Not reviewed]
Marcin Kuzminski - 13 years ago 2012-12-13 22:54:21
marcin@python-works.com
merge with beta
38 files changed:
0 comments (0 inline, 0 general)
.hgignore
Show inline comments
 
@@ -19,6 +19,6 @@ syntax: regexp
 
^rhodecode\.db$
 
^test\.db$
 
^RhodeCode\.egg-info$
 
^rc\.ini$
 
^rc.*\.ini$
 
^fabfile.py
 
^\.rhodecode$
CONTRIBUTORS
Show inline comments
 
@@ -28,4 +28,7 @@ List of contributors to RhodeCode projec
 
    Vincent Caron <vcaron@bearstech.com>
 
    Zachary Auclair <zach101@gmail.com>
 
    Stefan Engel <mail@engel-stefan.de>
 
    Andrew Shadura <bugzilla@tut.by>
 
\ No newline at end of file
 
    Andrew Shadura <bugzilla@tut.by>
 
    Raoul Thill <raoul.thill@gmail.com>
 
    Philip Jameson <philip.j@hostdime.com>
 
    Mads Kiilerich <madski@unity3d.com>
development.ini
Show inline comments
 
@@ -29,6 +29,7 @@ pdebug = false
 
#smtp_auth = 
 

	
 
[server:main]
 
## PASTE
 
##nr of threads to spawn
 
#threadpool_workers = 5
 

	
 
@@ -39,7 +40,11 @@ pdebug = false
 
#use_threadpool = true
 

	
 
#use = egg:Paste#http
 

	
 
#WAITRESS
 
threads = 5
 
use = egg:waitress#main
 

	
 
host = 0.0.0.0
 
port = 5000
 

	
 
@@ -54,16 +59,26 @@ use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, ja, pt_BR, zh_CN, zh_TW
 
# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = rc-develop
 
cut_off_limit = 256000
 
vcs_full_cache = True
 
force_https = false
 
commit_parse_limit = 25
 
# number of items displayed in lightweight dashboard before paginating
 
dashboard_items = 100
 
use_gravatar = true
 

	
 
## RSS feed options
 

	
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 

	
 
## alternative_gravatar_url allows you to use your own avatar server application
 
## the following parts of the URL will be replaced
 
## {email}        user email
 
@@ -76,6 +91,8 @@ use_gravatar = true
 

	
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
## default encoding used to convert from and to unicode
 
## can be also a comma seperated list of encoding in case of mixed encodings
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
@@ -227,6 +244,87 @@ beaker.session.auto = False
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
############################
 
## ERROR HANDLING SYSTEMS ##
 
############################
 

	
 
####################
 
### [errormator] ###
 
####################
 

	
 
# Errormator is tailored to work with RhodeCode, see 
 
# http://errormator.com for details how to obtain an account
 
# you must install python package `errormator_client` to make it work
 

	
 
# errormator enabled
 
errormator = true
 

	
 
errormator.server_url = https://api.errormator.com
 
errormator.api_key = YOUR_API_KEY
 

	
 
# TWEAK AMOUNT OF INFO SENT HERE
 

	
 
# enables 404 error logging (default False)
 
errormator.report_404 = false
 

	
 
# time in seconds after request is considered being slow (default 1)
 
errormator.slow_request_time = 1
 

	
 
# record slow requests in application
 
# (needs to be enabled for slow datastore recording and time tracking)
 
errormator.slow_requests = true
 

	
 
# enable hooking to application loggers
 
# errormator.logging = true
 

	
 
# minimum log level for log capture
 
# errormator.logging.level = WARNING
 

	
 
# send logs only from erroneous/slow requests
 
# (saves API quota for intensive logging)
 
errormator.logging_on_error = false
 

	
 
# list of additonal keywords that should be grabbed from environ object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always send following info:
 
# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
 
# start with HTTP* this list be extended with additional keywords here
 
errormator.environ_keys_whitelist = 
 

	
 

	
 
# list of keywords that should be blanked from request object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always blank keys that contain following words 
 
# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
 
# this list be extended with additional keywords set here
 
errormator.request_keys_blacklist =
 

	
 

	
 
# list of namespaces that should be ignores when gathering log entries
 
# can be string with comma separated list of namespaces
 
# (by default the client ignores own entries: errormator_client.client)
 
errormator.log_namespace_blacklist =  
 

	
 

	
 
################
 
### [sentry] ###
 
################
 

	
 
# sentry is a alternative open source error aggregator
 
# you must install python packages `sentry` and `raven` to enable 
 

	
 
sentry.dsn = YOUR_DNS
 
sentry.servers =
 
sentry.name =
 
sentry.key =
 
sentry.public_key =
 
sentry.secret_key =
 
sentry.project =
 
sentry.site =
 
sentry.include_paths =
 
sentry.exclude_paths =
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
docs/changelog.rst
Show inline comments
 
@@ -4,6 +4,71 @@
 
Changelog
 
=========
 

	
 

	
 
1.5.0 (**2012-12-12**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- new rewritten from scratch diff engine. 10x faster in edge cases. Handling
 
  of file renames, copies, change flags and binary files
 
- added lightweight dashboard option. ref #500. New version of dashboard
 
  page that doesn't use any VCS data and is super fast to render. Recommended
 
  for large amount of repositories.
 
- implements #648 write Script for updating last modification time for
 
  lightweight dashboard
 
- implemented compare engine for git repositories.
 
- LDAP failover, option to specify multiple servers
 
- added Errormator and Sentry support for monitoring RhodeCode
 
- implemented #628: Pass server URL to rc-extensions hooks
 
- new tooltip implementation - added lazy loading of changesets from journal
 
  pages. This can significantly improve speed of rendering the page
 
- implements #632,added branch/tag/bookmarks info into feeds
 
  added changeset link to body of message
 
- implemented #638 permissions overview to groups
 
- implements #636, lazy loading of history and authors to speed up source
 
  pages rendering
 
- implemented #647, option to pass list of default encoding used to 
 
  encode to/decode from unicode
 
- added caching layer into RSS/ATOM feeds.
 
- basic implementation of cherry picking changesets for pull request, ref #575
 
- implemented #661 Add option to include diff in RSS feed
 
- implemented file history page for showing detailed changelog for a given file
 
- implemented #663 Admin/permission: specify default repogroup perms
 
- implemented #379 defaults settings page for creation of repositories, locking
 
  statistics, downloads, repository type
 
- implemented #210 filtering of admin journal based on Whoosh Query language
 
- added parents/children links in changeset viewref #650
 

	
 
fixes
 
+++++
 

	
 
- fixed git version checker
 
- #586 patched basic auth handler to fix issues with git behind proxy
 
- #589 search urlgenerator didn't properly escape special characters
 
- fixed issue #614 Include repo name in delete confirmation dialog
 
- fixed #623: Lang meta-tag doesn't work with C#/C++
 
- fixes #612 Double quotes to Single quotes result in bad html in diff
 
- fixes #630 git statistics do too much work making them slow.
 
- fixes #625 Git-Tags are not displayed in Shortlog
 
- fix for issue #602, enforce str when setting mercurial UI object. 
 
  When this is used together with mercurial internal translation system
 
  it can lead to UnicodeDecodeErrors
 
- fixes #645 Fix git handler when doing delete remote branch
 
- implements #649 added two seperate method for author and commiter to VCS
 
  changeset class switch author for git backed to be the real author not commiter
 
- fix issue #504 RhodeCode is showing different versions of README on
 
  different summary page loads
 
- implemented #658 Changing username in LDAP-Mode should not be allowed.
 
- fixes #652 switch to generator approach when doing file annotation to prevent
 
  huge memory consumption 
 
- fixes #666 move lockkey path location to cache_dir to ensure this path is
 
  always writable for rhodecode server
 
- many more small fixes and improvements
 
- fixed issues with recursive scans on removed repositories that could take
 
  long time on instance start
 

	
 
1.4.4 (**2012-10-08**)
 
----------------------
 

	
docs/index.rst
Show inline comments
 
@@ -25,6 +25,7 @@ Users Guide
 
   usage/locking
 
   usage/statistics
 
   usage/backup
 
   usage/subrepos
 
   usage/debugging
 
   usage/troubleshooting
 

	
docs/setup.rst
Show inline comments
 
@@ -204,7 +204,8 @@ Enable LDAP : required
 
.. _ldap_host:
 

	
 
Host : required
 
    LDAP server hostname or IP address.
 
    LDAP server hostname or IP address. Can be also a comma separated
 
    list of servers to support LDAP fail-over.
 

	
 
.. _Port:
 

	
docs/usage/git_support.rst
Show inline comments
 
@@ -8,16 +8,15 @@ GIT support
 
Git support in RhodeCode 1.3 was enabled by default. You need to have a git
 
client installed on the machine to make git fully work.
 

	
 
Although There are some limitations on git usage.
 
Although There is one limitation on git usage.
 

	
 
- hooks that are executed on pull/push are not *real* hooks, they are 
 
  just emulating the behavior, and are executed **BEFORE** action takes place.
 
- large pushes needs http server with chunked encoding support.
 
- large pushes requires a http server with chunked encoding support.
 
 
 
if you plan to use git you need to run RhodeCode with some
 
http server that supports chunked encoding which git http protocol uses, 
 
i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app 
 
replacement.
 
replacement. Starting from version 1.4 waitress_ is the default wsgi server
 
used in RhodeCode.
 

	
 
To use, simply change change the following in the .ini file::
 

	
docs/usage/subrepos.rst
Show inline comments
 
new file 100644
 
.. _subrepos:
 

	
 
=============================================
 
working with RhodeCode and mercurial subrepos
 
=============================================
 

	
 
example usage of Subrepos with RhodeCode::
 
    
 
    ## init a simple repo
 
    hg init repo1                                                                                                                                                                                         
 
    cd repo1
 
    echo "file1" > file1
 
    hg add file1 
 
    hg ci --message "initial file 1"
 
        
 
    #clone subrepo we want to add
 
    hg clone http://rc.local/subrepo
 

	
 
    ## use path like url to existing repo in RhodeCode
 
    echo "subrepo = http://rc.local/subrepo" > .hgsub
 

	
 
    hg add .hgsub
 
    hg ci --message "added remote subrepo"
 

	
 
    
 

	
 
In file list of repo1 you will see a connected subrepo at revision it was
 
during cloning.
 
Clicking in subrepos link should send you to proper repository in RhodeCode
 

	
 
cloning repo1 will also clone attached subrepository.
 

	
 
Next we can edit the subrepo data, and push back to RhodeCode. This will update
 
both of repositories.
 

	
 
see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more
 
information about subrepositories   
 
\ No newline at end of file
production.ini
Show inline comments
 
@@ -29,6 +29,7 @@ pdebug = false
 
#smtp_auth = 
 

	
 
[server:main]
 
## PASTE
 
##nr of threads to spawn
 
#threadpool_workers = 5
 

	
 
@@ -39,7 +40,11 @@ pdebug = false
 
#use_threadpool = true
 

	
 
#use = egg:Paste#http
 

	
 
#WAITRESS
 
threads = 5
 
use = egg:waitress#main
 

	
 
host = 127.0.0.1
 
port = 8001
 

	
 
@@ -54,16 +59,26 @@ use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, ja, pt_BR, zh_CN, zh_TW
 
# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = rc-production
 
cut_off_limit = 256000
 
vcs_full_cache = True
 
force_https = false
 
commit_parse_limit = 50
 
# number of items displayed in lightweight dashboard before paginating
 
dashboard_items = 100
 
use_gravatar = true
 

	
 
## RSS feed options
 

	
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 

	
 
## alternative_gravatar_url allows you to use your own avatar server application
 
## the following parts of the URL will be replaced
 
## {email}        user email
 
@@ -76,6 +91,8 @@ use_gravatar = true
 

	
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
## default encoding used to convert from and to unicode
 
## can be also a comma seperated list of encoding in case of mixed encodings
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
@@ -227,6 +244,87 @@ beaker.session.auto = False
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
############################
 
## ERROR HANDLING SYSTEMS ##
 
############################
 

	
 
####################
 
### [errormator] ###
 
####################
 

	
 
# Errormator is tailored to work with RhodeCode, see 
 
# http://errormator.com for details how to obtain an account
 
# you must install python package `errormator_client` to make it work
 

	
 
# errormator enabled
 
errormator = true
 

	
 
errormator.server_url = https://api.errormator.com
 
errormator.api_key = YOUR_API_KEY
 

	
 
# TWEAK AMOUNT OF INFO SENT HERE
 

	
 
# enables 404 error logging (default False)
 
errormator.report_404 = false
 

	
 
# time in seconds after request is considered being slow (default 1)
 
errormator.slow_request_time = 1
 

	
 
# record slow requests in application
 
# (needs to be enabled for slow datastore recording and time tracking)
 
errormator.slow_requests = true
 

	
 
# enable hooking to application loggers
 
# errormator.logging = true
 

	
 
# minimum log level for log capture
 
# errormator.logging.level = WARNING
 

	
 
# send logs only from erroneous/slow requests
 
# (saves API quota for intensive logging)
 
errormator.logging_on_error = false
 

	
 
# list of additonal keywords that should be grabbed from environ object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always send following info:
 
# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
 
# start with HTTP* this list be extended with additional keywords here
 
errormator.environ_keys_whitelist = 
 

	
 

	
 
# list of keywords that should be blanked from request object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always blank keys that contain following words 
 
# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
 
# this list be extended with additional keywords set here
 
errormator.request_keys_blacklist =
 

	
 

	
 
# list of namespaces that should be ignores when gathering log entries
 
# can be string with comma separated list of namespaces
 
# (by default the client ignores own entries: errormator_client.client)
 
errormator.log_namespace_blacklist =  
 

	
 

	
 
################
 
### [sentry] ###
 
################
 

	
 
# sentry is a alternative open source error aggregator
 
# you must install python packages `sentry` and `raven` to enable 
 

	
 
sentry.dsn = YOUR_DNS
 
sentry.servers =
 
sentry.name =
 
sentry.key =
 
sentry.public_key =
 
sentry.secret_key =
 
sentry.project =
 
sentry.site =
 
sentry.include_paths =
 
sentry.exclude_paths =
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
rhodecode/__init__.py
Show inline comments
 
@@ -26,7 +26,7 @@
 
import sys
 
import platform
 

	
 
VERSION = (1, 4, 4)
 
VERSION = (1, 5, 0)
 

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

	
 
__version__ = ('.'.join((str(each) for each in VERSION[:3])) +
 
               '.'.join(VERSION[3:]))
 
__dbversion__ = 7  # defines current db version for migrations
 
__dbversion__ = 8  # defines current db version for migrations
 
__platform__ = platform.system()
 
__license__ = 'GPLv3'
 
__py_version__ = sys.version_info
rhodecode/config/deployment.ini_tmpl
Show inline comments
 
@@ -29,6 +29,7 @@ pdebug = false
 
#smtp_auth = 
 

	
 
[server:main]
 
## PASTE
 
##nr of threads to spawn
 
#threadpool_workers = 5
 

	
 
@@ -39,7 +40,11 @@ pdebug = false
 
#use_threadpool = true
 

	
 
#use = egg:Paste#http
 

	
 
#WAITRESS
 
threads = 5
 
use = egg:waitress#main
 

	
 
host = 127.0.0.1
 
port = 5000
 

	
 
@@ -54,16 +59,26 @@ use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, ja, pt_BR, zh_CN, zh_TW
 
# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = ${app_instance_uuid}
 
cut_off_limit = 256000
 
vcs_full_cache = True
 
force_https = false
 
commit_parse_limit = 50
 
# number of items displayed in lightweight dashboard before paginating
 
dashboard_items = 100
 
use_gravatar = true
 

	
 
## RSS feed options
 

	
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 

	
 
## alternative_gravatar_url allows you to use your own avatar server application
 
## the following parts of the URL will be replaced
 
## {email}        user email
 
@@ -76,6 +91,8 @@ use_gravatar = true
 

	
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
## default encoding used to convert from and to unicode
 
## can be also a comma seperated list of encoding in case of mixed encodings
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
@@ -227,6 +244,87 @@ beaker.session.auto = False
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
############################
 
## ERROR HANDLING SYSTEMS ##
 
############################
 

	
 
####################
 
### [errormator] ###
 
####################
 

	
 
# Errormator is tailored to work with RhodeCode, see 
 
# http://errormator.com for details how to obtain an account
 
# you must install python package `errormator_client` to make it work
 

	
 
# errormator enabled
 
errormator = true
 

	
 
errormator.server_url = https://api.errormator.com
 
errormator.api_key = YOUR_API_KEY
 

	
 
# TWEAK AMOUNT OF INFO SENT HERE
 

	
 
# enables 404 error logging (default False)
 
errormator.report_404 = false
 

	
 
# time in seconds after request is considered being slow (default 1)
 
errormator.slow_request_time = 1
 

	
 
# record slow requests in application
 
# (needs to be enabled for slow datastore recording and time tracking)
 
errormator.slow_requests = true
 

	
 
# enable hooking to application loggers
 
# errormator.logging = true
 

	
 
# minimum log level for log capture
 
# errormator.logging.level = WARNING
 

	
 
# send logs only from erroneous/slow requests
 
# (saves API quota for intensive logging)
 
errormator.logging_on_error = false
 

	
 
# list of additonal keywords that should be grabbed from environ object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always send following info:
 
# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
 
# start with HTTP* this list be extended with additional keywords here
 
errormator.environ_keys_whitelist = 
 

	
 

	
 
# list of keywords that should be blanked from request object 
 
# can be string with comma separated list of words in lowercase
 
# (by default client will always blank keys that contain following words 
 
# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
 
# this list be extended with additional keywords set here
 
errormator.request_keys_blacklist =
 

	
 

	
 
# list of namespaces that should be ignores when gathering log entries
 
# can be string with comma separated list of namespaces
 
# (by default the client ignores own entries: errormator_client.client)
 
errormator.log_namespace_blacklist =  
 

	
 

	
 
################
 
### [sentry] ###
 
################
 

	
 
# sentry is a alternative open source error aggregator
 
# you must install python packages `sentry` and `raven` to enable 
 

	
 
sentry.dsn = YOUR_DNS
 
sentry.servers =
 
sentry.name =
 
sentry.key =
 
sentry.public_key =
 
sentry.secret_key =
 
sentry.project =
 
sentry.site =
 
sentry.include_paths =
 
sentry.exclude_paths =
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
rhodecode/config/middleware.py
Show inline comments
 
@@ -53,6 +53,13 @@ def make_app(global_conf, full_stack=Tru
 

	
 
    if asbool(full_stack):
 

	
 
        from rhodecode.lib.middleware.sentry import Sentry
 
        from rhodecode.lib.middleware.errormator import Errormator
 
        if Errormator:
 
            app = Errormator(app, config)
 
        elif Sentry:
 
            app = Sentry(app, config)
 

	
 
        # Handle Python exceptions
 
        app = ErrorHandler(app, global_conf, **config['pylons.errorware'])
 

	
rhodecode/config/rcextensions/__init__.py
Show inline comments
 
@@ -75,18 +75,21 @@ DELETE_REPO_HOOK = _dlhook
 
# POST PUSH HOOK
 
#==============================================================================
 

	
 
# this function will be executed after each push it's runned after the build-in
 
# hook that rhodecode uses for logging pushes
 
# this function will be executed after each push it's executed after the
 
# build-in hook that RhodeCode uses for logging pushes
 
def _pushhook(*args, **kwargs):
 
    """
 
    Post push hook
 
    kwargs available:
 

	
 
      :param server_url: url of instance that triggered this hook
 
      :param config: path to .ini config used
 
      :param scm: type of VS 'git' or 'hg'
 
      :param username: name of user who pushed
 
      :param ip: ip of who pushed
 
      :param action: pull
 
      :param action: push
 
      :param repository: repository name
 
      :param pushed_revs: generator of pushed revisions
 
      :param pushed_revs: list of pushed revisions
 
    """
 
    return 0
 
PUSH_HOOK = _pushhook
 
@@ -96,15 +99,18 @@ PUSH_HOOK = _pushhook
 
# POST PULL HOOK
 
#==============================================================================
 

	
 
# this function will be executed after each push it's runned after the build-in
 
# hook that rhodecode uses for logging pushes
 
# this function will be executed after each push it's executed after the
 
# build-in hook that RhodeCode uses for logging pulls
 
def _pullhook(*args, **kwargs):
 
    """
 
    Post pull hook
 
    kwargs available::
 

	
 
      :param server_url: url of instance that triggered this hook
 
      :param config: path to .ini config used
 
      :param scm: type of VS 'git' or 'hg'
 
      :param username: name of user who pulled
 
      :param ip: ip of who pushed
 
      :param ip: ip of who pulled
 
      :param action: pull
 
      :param repository: repository name
 
    """
rhodecode/config/routing.py
Show inline comments
 
@@ -32,6 +32,10 @@ def make_map(config):
 
        from rhodecode.model.db import Repository
 
        repo_name = match_dict.get('repo_name')
 

	
 
        if match_dict.get('f_path'):
 
            #fix for multiple initial slashes that causes errors
 
            match_dict['f_path'] = match_dict['f_path'].lstrip('/')
 

	
 
        try:
 
            by_id = repo_name.split('_')
 
            if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '':
 
@@ -258,6 +262,10 @@ def make_map(config):
 
    rmap.resource('permission', 'permissions',
 
                  controller='admin/permissions', path_prefix=ADMIN_PREFIX)
 

	
 
    #ADMIN DEFAULTS REST ROUTES
 
    rmap.resource('default', 'defaults',
 
                  controller='admin/defaults', path_prefix=ADMIN_PREFIX)
 

	
 
    ##ADMIN LDAP SETTINGS
 
    rmap.connect('ldap_settings', '%s/ldap' % ADMIN_PREFIX,
 
                 controller='admin/ldap_settings', action='ldap_settings',
 
@@ -347,6 +355,8 @@ def make_map(config):
 
        m.connect('api', '/api')
 

	
 
    #USER JOURNAL
 
    rmap.connect('journal_my_repos', '%s/journal_my_repos' % ADMIN_PREFIX,
 
                 controller='journal', action='index_my_repos')
 
    rmap.connect('journal', '%s/journal' % ADMIN_PREFIX,
 
                 controller='journal', action='index')
 
    rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX,
 
@@ -419,6 +429,28 @@ def make_map(config):
 
                controller='changeset', revision='tip',
 
                conditions=dict(function=check_repo))
 

	
 
    #still working url for backward compat.
 
    rmap.connect('raw_changeset_home_depraced',
 
                 '/{repo_name:.*?}/raw-changeset/{revision}',
 
                 controller='changeset', action='changeset_raw',
 
                 revision='tip', conditions=dict(function=check_repo))
 

	
 
    ## new URLs
 
    rmap.connect('changeset_raw_home',
 
                 '/{repo_name:.*?}/changeset-diff/{revision}',
 
                 controller='changeset', action='changeset_raw',
 
                 revision='tip', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('changeset_patch_home',
 
                 '/{repo_name:.*?}/changeset-patch/{revision}',
 
                 controller='changeset', action='changeset_patch',
 
                 revision='tip', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('changeset_download_home',
 
                 '/{repo_name:.*?}/changeset-download/{revision}',
 
                 controller='changeset', action='changeset_download',
 
                 revision='tip', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('changeset_comment',
 
                 '/{repo_name:.*?}/changeset/{revision}/comment',
 
                controller='changeset', revision='tip', action='comment',
 
@@ -429,13 +461,11 @@ def make_map(config):
 
                controller='changeset', action='delete_comment',
 
                conditions=dict(function=check_repo, method=["DELETE"]))
 

	
 
    rmap.connect('raw_changeset_home',
 
                 '/{repo_name:.*?}/raw-changeset/{revision}',
 
                 controller='changeset', action='raw_changeset',
 
                 revision='tip', conditions=dict(function=check_repo))
 
    rmap.connect('changeset_info', '/changeset_info/{repo_name:.*?}/{revision}',
 
                 controller='changeset', action='changeset_info')
 

	
 
    rmap.connect('compare_url',
 
                 '/{repo_name:.*?}/compare/{org_ref_type}@{org_ref}...{other_ref_type}@{other_ref}',
 
                 '/{repo_name:.*?}/compare/{org_ref_type}@{org_ref:.*?}...{other_ref_type}@{other_ref:.*?}',
 
                 controller='compare', action='index',
 
                 conditions=dict(function=check_repo),
 
                 requirements=dict(
 
@@ -492,6 +522,10 @@ def make_map(config):
 
    rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog',
 
                controller='shortlog', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('shortlog_file_home', '/{repo_name:.*?}/shortlog/{revision}/{f_path:.*}',
 
                controller='shortlog', f_path=None,
 
                conditions=dict(function=check_repo))
 

	
 
    rmap.connect('branches_home', '/{repo_name:.*?}/branches',
 
                controller='branches', conditions=dict(function=check_repo))
 

	
 
@@ -512,6 +546,11 @@ def make_map(config):
 
                controller='files', revision='tip', f_path='',
 
                conditions=dict(function=check_repo))
 

	
 
    rmap.connect('files_history_home',
 
                 '/{repo_name:.*?}/history/{revision}/{f_path:.*}',
 
                 controller='files', action='history', revision='tip', f_path='',
 
                 conditions=dict(function=check_repo))
 

	
 
    rmap.connect('files_diff_home', '/{repo_name:.*?}/diff/{f_path:.*}',
 
                controller='files', action='diff', revision='tip', f_path='',
 
                conditions=dict(function=check_repo))
rhodecode/config/setup_rhodecode.py
Show inline comments
 
@@ -50,6 +50,16 @@ class SetupCommand(AbstractInstallComman
 
                      dest='section_name',
 
                      default=None,
 
                      help='The name of the section to set up (default: app:main)')
 
    parser.add_option('--force-yes',
 
                       action='store_true',
 
                       dest='force_ask',
 
                       default=None,
 
                       help='Force yes to every question')
 
    parser.add_option('--force-no',
 
                       action='store_false',
 
                       dest='force_ask',
 
                       default=None,
 
                       help='Force no to every question')
 

	
 
    def command(self):
 
        config_spec = self.args[0]
rhodecode/controllers/admin/admin.py
Show inline comments
 
@@ -25,18 +25,95 @@
 

	
 
import logging
 

	
 
from pylons import request, tmpl_context as c
 
from pylons import request, tmpl_context as c, url
 
from sqlalchemy.orm import joinedload
 
from webhelpers.paginate import Page
 
from whoosh.qparser.default import QueryParser
 
from whoosh import query
 
from sqlalchemy.sql.expression import or_, and_, func
 

	
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.db import UserLog
 
from rhodecode.lib.utils2 import safe_int
 
from rhodecode.model.db import UserLog, User
 
from rhodecode.lib.utils2 import safe_int, remove_prefix, remove_suffix
 
from rhodecode.lib.indexers import JOURNAL_SCHEMA
 
from whoosh.qparser.dateparse import DateParserPlugin
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def _journal_filter(user_log, search_term):
 
    """
 
    Filters sqlalchemy user_log based on search_term with whoosh Query language
 
    http://packages.python.org/Whoosh/querylang.html
 

	
 
    :param user_log:
 
    :param search_term:
 
    """
 
    log.debug('Initial search term: %r' % search_term)
 
    qry = None
 
    if search_term:
 
        qp = QueryParser('repository', schema=JOURNAL_SCHEMA)
 
        qp.add_plugin(DateParserPlugin())
 
        qry = qp.parse(unicode(search_term))
 
        log.debug('Filtering using parsed query %r' % qry)
 

	
 
    def wildcard_handler(col, wc_term):
 
        if wc_term.startswith('*') and not wc_term.endswith('*'):
 
            #postfix == endswith
 
            wc_term = remove_prefix(wc_term, prefix='*')
 
            return func.lower(col).endswith(wc_term)
 
        elif wc_term.startswith('*') and wc_term.endswith('*'):
 
            #wildcard == ilike
 
            wc_term = remove_prefix(wc_term, prefix='*')
 
            wc_term = remove_suffix(wc_term, suffix='*')
 
            return func.lower(col).contains(wc_term)
 

	
 
    def get_filterion(field, val, term):
 

	
 
        if field == 'repository':
 
            field = getattr(UserLog, 'repository_name')
 
        elif field == 'ip':
 
            field = getattr(UserLog, 'user_ip')
 
        elif field == 'date':
 
            field = getattr(UserLog, 'action_date')
 
        elif field == 'username':
 
            field = getattr(UserLog, 'username')
 
        else:
 
            field = getattr(UserLog, field)
 
        log.debug('filter field: %s val=>%s' % (field, val))
 

	
 
        #sql filtering
 
        if isinstance(term, query.Wildcard):
 
            return wildcard_handler(field, val)
 
        elif isinstance(term, query.Prefix):
 
            return func.lower(field).startswith(func.lower(val))
 
        elif isinstance(term, query.DateRange):
 
            return and_(field >= val[0], field <= val[1])
 
        return func.lower(field) == func.lower(val)
 

	
 
    if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard,
 
                        query.DateRange)):
 
        if not isinstance(qry, query.And):
 
            qry = [qry]
 
        for term in qry:
 
            field = term.fieldname
 
            val = (term.text if not isinstance(term, query.DateRange)
 
                   else [term.startdate, term.enddate])
 
            user_log = user_log.filter(get_filterion(field, val, term))
 
    elif isinstance(qry, query.Or):
 
        filters = []
 
        for term in qry:
 
            field = term.fieldname
 
            val = (term.text if not isinstance(term, query.DateRange)
 
                   else [term.startdate, term.enddate])
 
            filters.append(get_filterion(field, val, term))
 
        user_log = user_log.filter(or_(*filters))
 

	
 
    return user_log
 

	
 

	
 
class AdminController(BaseController):
 

	
 
    @LoginRequired()
 
@@ -45,14 +122,26 @@ class AdminController(BaseController):
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def index(self):
 

	
 
        users_log = UserLog.query()\
 
                .options(joinedload(UserLog.user))\
 
                .options(joinedload(UserLog.repository))\
 
                .order_by(UserLog.action_date.desc())
 
                .options(joinedload(UserLog.repository))
 

	
 
        #FILTERING
 
        c.search_term = request.GET.get('filter')
 
        try:
 
            users_log = _journal_filter(users_log, c.search_term)
 
        except:
 
            # we want this to crash for now
 
            raise
 

	
 
        users_log = users_log.order_by(UserLog.action_date.desc())
 

	
 
        p = safe_int(request.params.get('page', 1), 1)
 
        c.users_log = Page(users_log, page=p, items_per_page=10)
 

	
 
        def url_generator(**kw):
 
            return url.current(filter=c.search_term, **kw)
 

	
 
        c.users_log = Page(users_log, page=p, items_per_page=10, url=url_generator)
 
        c.log_data = render('admin/admin_log.html')
 

	
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
rhodecode/controllers/admin/defaults.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.admin.defaults
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    default settings controller for Rhodecode
 

	
 
    :created_on: Apr 27, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :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 <http://www.gnu.org/licenses/>.
 

	
 
import logging
 
import traceback
 
import formencode
 
from formencode import htmlfill
 

	
 
from pylons import request, session, tmpl_context as c, url
 
from pylons.controllers.util import abort, redirect
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.forms import DefaultsForm
 
from rhodecode.model.meta import Session
 
from rhodecode import BACKENDS
 
from rhodecode.model.db import RhodeCodeSetting
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class DefaultsController(BaseController):
 
    """REST Controller styled on the Atom Publishing Protocol"""
 
    # To properly map this controller, ensure your config/routing.py
 
    # file has a resource setup:
 
    #     map.resource('default', 'defaults')
 

	
 
    @LoginRequired()
 
    @HasPermissionAllDecorator('hg.admin')
 
    def __before__(self):
 
        super(DefaultsController, self).__before__()
 

	
 
    def index(self, format='html'):
 
        """GET /defaults: All items in the collection"""
 
        # url('defaults')
 
        c.backends = BACKENDS.keys()
 
        defaults = RhodeCodeSetting.get_default_repo_settings()
 

	
 
        return htmlfill.render(
 
            render('admin/defaults/defaults.html'),
 
            defaults=defaults,
 
            encoding="UTF-8",
 
            force_defaults=False
 
        )
 

	
 
    def create(self):
 
        """POST /defaults: Create a new item"""
 
        # url('defaults')
 

	
 
    def new(self, format='html'):
 
        """GET /defaults/new: Form to create a new item"""
 
        # url('new_default')
 

	
 
    def update(self, id):
 
        """PUT /defaults/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
 
        #    h.form(url('default', id=ID),
 
        #           method='put')
 
        # url('default', id=ID)
 

	
 
        _form = DefaultsForm()()
 

	
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            for k, v in form_result.iteritems():
 
                setting = RhodeCodeSetting.get_by_name_or_create(k)
 
                setting.app_settings_value = v
 
                Session().add(setting)
 
            Session().commit()
 
            h.flash(_('Default settings updated successfully'),
 
                    category='success')
 

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

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

	
 
        return redirect(url('defaults'))
 

	
 
    def delete(self, id):
 
        """DELETE /defaults/id: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="DELETE" />
 
        # Or using helpers:
 
        #    h.form(url('default', id=ID),
 
        #           method='delete')
 
        # url('default', id=ID)
 

	
 
    def show(self, id, format='html'):
 
        """GET /defaults/id: Show a specific item"""
 
        # url('default', id=ID)
 

	
 
    def edit(self, id, format='html'):
 
        """GET /defaults/id/edit: Form to edit an existing item"""
 
        # url('edit_default', id=ID)
rhodecode/controllers/admin/permissions.py
Show inline comments
 
@@ -56,10 +56,14 @@ class PermissionsController(BaseControll
 
        c.admin_username = session.get('admin_username')
 
        super(PermissionsController, self).__before__()
 

	
 
        self.perms_choices = [('repository.none', _('None'),),
 
        self.repo_perms_choices = [('repository.none', _('None'),),
 
                              ('repository.read', _('Read'),),
 
                              ('repository.write', _('Write'),),
 
                              ('repository.admin', _('Admin'),)]
 
        self.group_perms_choices = [('group.none', _('None'),),
 
                                    ('group.read', _('Read'),),
 
                                    ('group.write', _('Write'),),
 
                                    ('group.admin', _('Admin'),)]
 
        self.register_choices = [
 
            ('hg.register.none',
 
                _('disabled')),
 
@@ -75,7 +79,8 @@ class PermissionsController(BaseControll
 
                             ('hg.fork.repository', _('Enabled'))]
 

	
 
        # set the global template variables
 
        c.perms_choices = self.perms_choices
 
        c.repo_perms_choices = self.repo_perms_choices
 
        c.group_perms_choices = self.group_perms_choices
 
        c.register_choices = self.register_choices
 
        c.create_choices = self.create_choices
 
        c.fork_choices = self.fork_choices
 
@@ -103,7 +108,8 @@ class PermissionsController(BaseControll
 

	
 
        permission_model = PermissionModel()
 

	
 
        _form = DefaultPermissionsForm([x[0] for x in self.perms_choices],
 
        _form = DefaultPermissionsForm([x[0] for x in self.repo_perms_choices],
 
                                       [x[0] for x in self.group_perms_choices],
 
                                       [x[0] for x in self.register_choices],
 
                                       [x[0] for x in self.create_choices],
 
                                       [x[0] for x in self.fork_choices])()
 
@@ -157,7 +163,10 @@ class PermissionsController(BaseControll
 

	
 
            for p in default_user.user_perms:
 
                if p.permission.permission_name.startswith('repository.'):
 
                    defaults['default_perm'] = p.permission.permission_name
 
                    defaults['default_repo_perm'] = p.permission.permission_name
 

	
 
                if p.permission.permission_name.startswith('group.'):
 
                    defaults['default_group_perm'] = p.permission.permission_name
 

	
 
                if p.permission.permission_name.startswith('hg.register.'):
 
                    defaults['default_register'] = p.permission.permission_name
rhodecode/controllers/admin/repos.py
Show inline comments
 
@@ -42,11 +42,13 @@ from rhodecode.lib.base import BaseContr
 
from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug
 
from rhodecode.lib.helpers import get_token
 
from rhodecode.model.meta import Session
 
from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup
 
from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\
 
    RhodeCodeSetting
 
from rhodecode.model.forms import RepoForm
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.lib.compat import json
 
from sqlalchemy.sql.expression import func
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -95,6 +97,7 @@ class ReposController(BaseController):
 

	
 
            return redirect(url('repos'))
 

	
 
        ##override defaults for exact repo info here git/hg etc
 
        choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
 
        c.landing_revs_choices = choices
 

	
 
@@ -134,7 +137,7 @@ class ReposController(BaseController):
 
        # url('repos')
 

	
 
        c.repos_list = Repository.query()\
 
                        .order_by(Repository.repo_name)\
 
                        .order_by(func.lower(Repository.repo_name))\
 
                        .all()
 

	
 
        repos_data = []
 
@@ -156,7 +159,7 @@ class ReposController(BaseController):
 
        for repo in c.repos_list:
 
            repos_data.append({
 
                "menu": quick_menu(repo.repo_name),
 
                "raw_name": repo.repo_name,
 
                "raw_name": repo.repo_name.lower(),
 
                "name": repo_lnk(repo.repo_name, repo.repo_type,
 
                                 repo.private, repo.fork),
 
                "desc": repo.description,
 
@@ -237,7 +240,15 @@ class ReposController(BaseController):
 
        new_repo = request.GET.get('repo', '')
 
        c.new_repo = repo_name_slug(new_repo)
 
        self.__load_defaults()
 
        return render('admin/repos/repo_add.html')
 
        ## apply the defaults from defaults page
 
        defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
 
        return htmlfill.render(
 
            render('admin/repos/repo_add.html'),
 
            defaults=defaults,
 
            errors={},
 
            prefix_error=False,
 
            encoding="UTF-8"
 
        )
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def update(self, repo_name):
 
@@ -261,7 +272,7 @@ class ReposController(BaseController):
 
                         landing_revs=c.landing_revs_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            repo = repo_model.update(repo_name, form_result)
 
            repo = repo_model.update(repo_name, **form_result)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('Repository %s updated successfully') % repo_name,
 
                    category='success')
rhodecode/controllers/admin/repos_groups.py
Show inline comments
 
@@ -35,17 +35,20 @@ from pylons.i18n.translation import _
 

	
 
from sqlalchemy.exc import IntegrityError
 

	
 
import rhodecode
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.ext_json import json
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\
 
    HasReposGroupPermissionAnyDecorator
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.db import RepoGroup
 
from rhodecode.model.db import RepoGroup, Repository
 
from rhodecode.model.repos_group import ReposGroupModel
 
from rhodecode.model.forms import ReposGroupForm
 
from rhodecode.model.meta import Session
 
from rhodecode.model.repo import RepoModel
 
from webob.exc import HTTPInternalServerError, HTTPNotFound
 
from rhodecode.lib.utils2 import str2bool
 
from sqlalchemy.sql.expression import func
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -281,20 +284,66 @@ class ReposGroupsController(BaseControll
 
        # url('repos_group', id=ID)
 

	
 
        c.group = RepoGroup.get_or_404(id)
 

	
 
        c.group_repos = c.group.repositories.all()
 

	
 
        #overwrite our cached list with current filter
 
        gr_filter = c.group_repos
 
        c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter)
 

	
 
        c.repos_list = c.cached_repo_list
 

	
 
        c.repo_cnt = 0
 

	
 
        groups = RepoGroup.query().order_by(RepoGroup.group_name)\
 
            .filter(RepoGroup.group_parent_id == id).all()
 
        c.groups = self.scm_model.get_repos_groups(groups)
 

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

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

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

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

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

	
 
            c.data = json.dumps({
 
                "totalRecords": total_records,
 
                "startIndex": 0,
 
                "sort": "name",
 
                "dir": "asc",
 
                "records": repos_data
 
            })
 

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

	
 
    @HasPermissionAnyDecorator('hg.admin')
rhodecode/controllers/admin/settings.py
Show inline comments
 
@@ -185,18 +185,23 @@ class SettingsController(BaseController)
 
                sett1 = RhodeCodeSetting.get_by_name_or_create('show_public_icon')
 
                sett1.app_settings_value = \
 
                    form_result['rhodecode_show_public_icon']
 
                Session().add(sett1)
 

	
 
                sett2 = RhodeCodeSetting.get_by_name_or_create('show_private_icon')
 
                sett2.app_settings_value = \
 
                    form_result['rhodecode_show_private_icon']
 
                Session().add(sett2)
 

	
 
                sett3 = RhodeCodeSetting.get_by_name_or_create('stylify_metatags')
 
                sett3.app_settings_value = \
 
                    form_result['rhodecode_stylify_metatags']
 
                Session().add(sett3)
 

	
 
                Session().add(sett1)
 
                Session().add(sett2)
 
                Session().add(sett3)
 
                sett4 = RhodeCodeSetting.get_by_name_or_create('lightweight_dashboard')
 
                sett4.app_settings_value = \
 
                    form_result['rhodecode_lightweight_dashboard']
 
                Session().add(sett4)
 

	
 
                Session().commit()
 
                set_rhodecode_config(config)
 
                h.flash(_('Updated visualisation settings'),
 
@@ -476,7 +481,15 @@ class SettingsController(BaseController)
 
        new_repo = request.GET.get('repo', '')
 
        c.new_repo = repo_name_slug(new_repo)
 

	
 
        return render('admin/repos/repo_add_create_repository.html')
 
        ## apply the defaults from defaults page
 
        defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
 
        return htmlfill.render(
 
            render('admin/repos/repo_add_create_repository.html'),
 
            defaults=defaults,
 
            errors={},
 
            prefix_error=False,
 
            encoding="UTF-8"
 
        )
 

	
 
    def _get_hg_ui_settings(self):
 
        ret = RhodeCodeUi.query().all()
rhodecode/controllers/admin/users.py
Show inline comments
 
@@ -158,13 +158,18 @@ class UsersController(BaseController):
 
        # url('user', id=ID)
 
        user_model = UserModel()
 
        c.user = user_model.get(id)
 
        c.ldap_dn = c.user.ldap_dn
 
        c.perm_user = AuthUser(user_id=id)
 
        _form = UserForm(edit=True, old_data={'user_id': id,
 
                                              'email': c.user.email})()
 
        form_result = {}
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            user_model.update(id, form_result)
 
            skip_attrs = []
 
            if c.ldap_dn:
 
                #forbid updating username for ldap accounts
 
                skip_attrs = ['username']
 
            user_model.update(id, form_result, skip_attrs=skip_attrs)
 
            usr = form_result['username']
 
            action_logger(self.rhodecode_user, 'admin_updated_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
@@ -233,6 +238,7 @@ class UsersController(BaseController):
 
        c.user_email_map = UserEmailMap.query()\
 
                        .filter(UserEmailMap.user == c.user).all()
 
        user_model = UserModel()
 
        c.ldap_dn = c.user.ldap_dn
 
        defaults = c.user.get_dict()
 
        defaults.update({
 
            'create_repo_perm': user_model.has_perm(id, 'hg.create.repository'),
rhodecode/controllers/admin/users_groups.py
Show inline comments
 
@@ -40,10 +40,12 @@ from rhodecode.lib.base import BaseContr
 

	
 
from rhodecode.model.users_group import UsersGroupModel
 

	
 
from rhodecode.model.db import User, UsersGroup
 
from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
 
    UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
 
from rhodecode.model.forms import UsersGroupForm
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils import action_logger
 
from sqlalchemy.orm import joinedload
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -102,6 +104,38 @@ class UsersGroupsController(BaseControll
 
        # url('new_users_group')
 
        return render('admin/users_groups/users_group_add.html')
 

	
 
    def _load_data(self, id):
 
        c.users_group.permissions = {
 
            'repositories': {},
 
            'repositories_groups': {}
 
        }
 

	
 
        ugroup_repo_perms = UsersGroupRepoToPerm.query()\
 
            .options(joinedload(UsersGroupRepoToPerm.permission))\
 
            .options(joinedload(UsersGroupRepoToPerm.repository))\
 
            .filter(UsersGroupRepoToPerm.users_group_id == id)\
 
            .all()
 

	
 
        for gr in ugroup_repo_perms:
 
            c.users_group.permissions['repositories'][gr.repository.repo_name]  \
 
                = gr.permission.permission_name
 

	
 
        ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\
 
            .options(joinedload(UsersGroupRepoGroupToPerm.permission))\
 
            .options(joinedload(UsersGroupRepoGroupToPerm.group))\
 
            .filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
 
            .all()
 

	
 
        for gr in ugroup_group_perms:
 
            c.users_group.permissions['repositories_groups'][gr.group.group_name] \
 
                = gr.permission.permission_name
 

	
 
        c.group_members_obj = [x.user for x in c.users_group.members]
 
        c.group_members = [(x.user_id, x.username) for x in
 
                           c.group_members_obj]
 
        c.available_members = [(x.user_id, x.username) for x in
 
                               User.query().all()]
 

	
 
    def update(self, id):
 
        """PUT /users_groups/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
@@ -111,13 +145,8 @@ class UsersGroupsController(BaseControll
 
        #           method='put')
 
        # url('users_group', id=ID)
 

	
 
        c.users_group = UsersGroup.get(id)
 
        c.group_members_obj = [x.user for x in c.users_group.members]
 
        c.group_members = [(x.user_id, x.username) for x in
 
                           c.group_members_obj]
 

	
 
        c.available_members = [(x.user_id, x.username) for x in
 
                               User.query().all()]
 
        c.users_group = UsersGroup.get_or_404(id)
 
        self._load_data(id)
 

	
 
        available_members = [safe_unicode(x[0]) for x in c.available_members]
 

	
 
@@ -189,13 +218,8 @@ class UsersGroupsController(BaseControll
 
        # url('edit_users_group', id=ID)
 

	
 
        c.users_group = UsersGroup.get_or_404(id)
 
        self._load_data(id)
 

	
 
        c.users_group.permissions = {}
 
        c.group_members_obj = [x.user for x in c.users_group.members]
 
        c.group_members = [(x.user_id, x.username) for x in
 
                           c.group_members_obj]
 
        c.available_members = [(x.user_id, x.username) for x in
 
                               User.query().all()]
 
        ug_model = UsersGroupModel()
 
        defaults = c.users_group.get_dict()
 
        defaults.update({
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -770,7 +770,6 @@ class ApiController(JSONRPCController):
 
                success=True
 
            )
 
        except Exception:
 
            print traceback.format_exc()
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError(
 
                'failed to edit permission for users group: `%s` in '
rhodecode/controllers/changeset.py
Show inline comments
 
@@ -26,16 +26,15 @@
 
import logging
 
import traceback
 
from collections import defaultdict
 
from webob.exc import HTTPForbidden
 
from webob.exc import HTTPForbidden, HTTPBadRequest
 

	
 
from pylons import tmpl_context as c, url, request, response
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons.decorators import jsonify
 
from rhodecode.lib.utils import jsonify
 

	
 
from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetError, \
 
from rhodecode.lib.vcs.exceptions import RepositoryError, \
 
    ChangesetDoesNotExistError
 
from rhodecode.lib.vcs.nodes import FileNode
 

	
 
import rhodecode.lib.helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
@@ -47,10 +46,11 @@ from rhodecode.model.db import Changeset
 
from rhodecode.model.comment import ChangesetCommentsModel
 
from rhodecode.model.changeset_status import ChangesetStatusModel
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.diffs import wrapped_diff
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.lib.diffs import LimitedDiffContainer
 
from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError
 
from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
from rhodecode.lib.utils2 import safe_unicode
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -109,7 +109,13 @@ def _ignorews_url(GET, fileid=None):
 

	
 
def get_line_ctx(fid, GET):
 
    ln_ctx_global = GET.get('context')
 
    if fid:
 
    ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid))
 
    else:
 
        _ln_ctx = filter(lambda k: k.startswith('C'), GET)
 
        ln_ctx = GET.get(_ln_ctx[0]) if _ln_ctx  else ln_ctx_global
 
        if ln_ctx:
 
            ln_ctx = [ln_ctx]
 

	
 
    if ln_ctx:
 
        retval = ln_ctx[0].split(':')[-1]
 
@@ -119,7 +125,7 @@ def get_line_ctx(fid, GET):
 
    try:
 
        return int(retval)
 
    except:
 
        return
 
        return 3
 

	
 

	
 
def _context_url(GET, fileid=None):
 
@@ -173,12 +179,11 @@ class ChangesetController(BaseRepoContro
 
        c.users_array = repo_model.get_users_js()
 
        c.users_groups_array = repo_model.get_users_groups_js()
 

	
 
    def index(self, revision):
 

	
 
    def index(self, revision, method='show'):
 
        c.anchor_url = anchor_url
 
        c.ignorews_url = _ignorews_url
 
        c.context_url = _context_url
 
        limit_off = request.GET.get('fulldiff')
 
        c.fulldiff = fulldiff = request.GET.get('fulldiff')
 
        #get ranges of revisions if preset
 
        rev_range = revision.split('...')[:2]
 
        enable_comments = True
 
@@ -206,16 +211,16 @@ class ChangesetController(BaseRepoContro
 
        c.lines_added = 0  # count of lines added
 
        c.lines_deleted = 0  # count of lines removes
 

	
 
        cumulative_diff = 0
 
        c.cut_off = False  # defines if cut off limit is reached
 
        c.changeset_statuses = ChangesetStatus.STATUSES
 
        c.comments = []
 
        c.statuses = []
 
        c.inline_comments = []
 
        c.inline_cnt = 0
 

	
 
        # Iterate over ranges (default changeset view is always one changeset)
 
        for changeset in c.cs_ranges:
 

	
 
            inlines = []
 
            if method == 'show':
 
            c.statuses.extend([ChangesetStatusModel()\
 
                              .get_status(c.rhodecode_db_repo.repo_id,
 
                                          changeset.raw_id)])
 
@@ -227,74 +232,42 @@ class ChangesetController(BaseRepoContro
 
                        .get_inline_comments(c.rhodecode_db_repo.repo_id,
 
                                             revision=changeset.raw_id)
 
            c.inline_comments.extend(inlines)
 

	
 
            c.changes[changeset.raw_id] = []
 
            try:
 
                changeset_parent = changeset.parents[0]
 
            except IndexError:
 
                changeset_parent = None
 

	
 
            cs2 = changeset.raw_id
 
            cs1 = changeset.parents[0].raw_id if changeset.parents else EmptyChangeset()
 
            context_lcl = get_line_ctx('', request.GET)
 
            ign_whitespace_lcl = ign_whitespace_lcl = get_ignore_ws('', request.GET)
 

	
 
            #==================================================================
 
            # ADDED FILES
 
            #==================================================================
 
            for node in changeset.added:
 
                fid = h.FID(revision, node.path)
 
                line_context_lcl = get_line_ctx(fid, request.GET)
 
                ign_whitespace_lcl = get_ignore_ws(fid, request.GET)
 
                lim = self.cut_off_limit
 
                if cumulative_diff > self.cut_off_limit:
 
                    lim = -1 if limit_off is None else None
 
                size, cs1, cs2, diff, st = wrapped_diff(
 
                    filenode_old=None,
 
                    filenode_new=node,
 
                    cut_off_limit=lim,
 
                    ignore_whitespace=ign_whitespace_lcl,
 
                    line_context=line_context_lcl,
 
                    enable_comments=enable_comments
 
                )
 
                cumulative_diff += size
 
            _diff = c.rhodecode_repo.get_diff(cs1, cs2,
 
                ignore_whitespace=ign_whitespace_lcl, context=context_lcl)
 
            diff_limit = self.cut_off_limit if not fulldiff else None
 
            diff_processor = diffs.DiffProcessor(_diff,
 
                                                 vcs=c.rhodecode_repo.alias,
 
                                                 format='gitdiff',
 
                                                 diff_limit=diff_limit)
 
            cs_changes = OrderedDict()
 
            if method == 'show':
 
                _parsed = diff_processor.prepare()
 
                c.limited_diff = False
 
                if isinstance(_parsed, LimitedDiffContainer):
 
                    c.limited_diff = True
 
                for f in _parsed:
 
                    st = f['stats']
 
                    if st[0] != 'b':
 
                c.lines_added += st[0]
 
                c.lines_deleted += st[1]
 
                c.changes[changeset.raw_id].append(
 
                    ('added', node, diff, cs1, cs2, st)
 
                )
 

	
 
            #==================================================================
 
            # CHANGED FILES
 
            #==================================================================
 
            for node in changeset.changed:
 
                try:
 
                    filenode_old = changeset_parent.get_node(node.path)
 
                except ChangesetError:
 
                    log.warning('Unable to fetch parent node for diff')
 
                    filenode_old = FileNode(node.path, '', EmptyChangeset())
 

	
 
                fid = h.FID(revision, node.path)
 
                line_context_lcl = get_line_ctx(fid, request.GET)
 
                ign_whitespace_lcl = get_ignore_ws(fid, request.GET)
 
                lim = self.cut_off_limit
 
                if cumulative_diff > self.cut_off_limit:
 
                    lim = -1 if limit_off is None else None
 
                size, cs1, cs2, diff, st = wrapped_diff(
 
                    filenode_old=filenode_old,
 
                    filenode_new=node,
 
                    cut_off_limit=lim,
 
                    ignore_whitespace=ign_whitespace_lcl,
 
                    line_context=line_context_lcl,
 
                    enable_comments=enable_comments
 
                )
 
                cumulative_diff += size
 
                c.lines_added += st[0]
 
                c.lines_deleted += st[1]
 
                c.changes[changeset.raw_id].append(
 
                    ('changed', node, diff, cs1, cs2, st)
 
                )
 
            #==================================================================
 
            # REMOVED FILES
 
            #==================================================================
 
            for node in changeset.removed:
 
                c.changes[changeset.raw_id].append(
 
                    ('removed', node, None, None, None, (0, 0))
 
                )
 
                    fid = h.FID(changeset.raw_id, f['filename'])
 
                    diff = diff_processor.as_html(enable_comments=enable_comments,
 
                                                  parsed_lines=[f])
 
                    cs_changes[fid] = [cs1, cs2, f['operation'], f['filename'],
 
                                       diff, st]
 
            else:
 
                # downloads/raw we only need RAW diff nothing else
 
                diff = diff_processor.as_raw()
 
                cs_changes[''] = [None, None, None, None, diff, None]
 
            c.changes[changeset.raw_id] = cs_changes
 

	
 
        # count inline comments
 
        for __, lines in c.inline_comments:
 
@@ -303,74 +276,34 @@ class ChangesetController(BaseRepoContro
 

	
 
        if len(c.cs_ranges) == 1:
 
            c.changeset = c.cs_ranges[0]
 
            c.changes = c.changes[c.changeset.raw_id]
 

	
 
            c.parent_tmpl = ''.join(['# Parent  %s\n' % x.raw_id
 
                                     for x in c.changeset.parents])
 
        if method == 'download':
 
            response.content_type = 'text/plain'
 
            response.content_disposition = 'attachment; filename=%s.diff' \
 
                                            % revision[:12]
 
            return diff
 
        elif method == 'patch':
 
            response.content_type = 'text/plain'
 
            c.diff = safe_unicode(diff)
 
            return render('changeset/patch_changeset.html')
 
        elif method == 'raw':
 
            response.content_type = 'text/plain'
 
            return diff
 
        elif method == 'show':
 
            if len(c.cs_ranges) == 1:
 
            return render('changeset/changeset.html')
 
        else:
 
            return render('changeset/changeset_range.html')
 

	
 
    def raw_changeset(self, revision):
 

	
 
        method = request.GET.get('diff', 'show')
 
        ignore_whitespace = request.GET.get('ignorews') == '1'
 
        line_context = request.GET.get('context', 3)
 
        try:
 
            c.scm_type = c.rhodecode_repo.alias
 
            c.changeset = c.rhodecode_repo.get_changeset(revision)
 
        except RepositoryError:
 
            log.error(traceback.format_exc())
 
            return redirect(url('home'))
 
        else:
 
            try:
 
                c.changeset_parent = c.changeset.parents[0]
 
            except IndexError:
 
                c.changeset_parent = None
 
            c.changes = []
 

	
 
            for node in c.changeset.added:
 
                filenode_old = FileNode(node.path, '')
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = _('binary file') + '\n'
 
                else:
 
                    f_gitdiff = diffs.get_gitdiff(filenode_old, node,
 
                                           ignore_whitespace=ignore_whitespace,
 
                                           context=line_context)
 
                    diff = diffs.DiffProcessor(f_gitdiff,
 
                                                format='gitdiff').raw_diff()
 
    def changeset_raw(self, revision):
 
        return self.index(revision, method='raw')
 

	
 
                cs1 = None
 
                cs2 = node.changeset.raw_id
 
                c.changes.append(('added', node, diff, cs1, cs2))
 

	
 
            for node in c.changeset.changed:
 
                filenode_old = c.changeset_parent.get_node(node.path)
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = _('binary file')
 
                else:
 
                    f_gitdiff = diffs.get_gitdiff(filenode_old, node,
 
                                           ignore_whitespace=ignore_whitespace,
 
                                           context=line_context)
 
                    diff = diffs.DiffProcessor(f_gitdiff,
 
                                                format='gitdiff').raw_diff()
 
    def changeset_patch(self, revision):
 
        return self.index(revision, method='patch')
 

	
 
                cs1 = filenode_old.changeset.raw_id
 
                cs2 = node.changeset.raw_id
 
                c.changes.append(('changed', node, diff, cs1, cs2))
 

	
 
        response.content_type = 'text/plain'
 

	
 
        if method == 'download':
 
            response.content_disposition = 'attachment; filename=%s.patch' \
 
                                            % revision
 

	
 
        c.parent_tmpl = ''.join(['# Parent  %s\n' % x.raw_id
 
                                 for x in c.changeset.parents])
 

	
 
        c.diffs = ''
 
        for x in c.changes:
 
            c.diffs += x[2]
 

	
 
        return render('changeset/raw_changeset.html')
 
    def changeset_download(self, revision):
 
        return self.index(revision, method='download')
 

	
 
    @jsonify
 
    def comment(self, repo_name, revision):
 
@@ -445,3 +378,13 @@ class ChangesetController(BaseRepoContro
 
            return True
 
        else:
 
            raise HTTPForbidden()
 

	
 
    @jsonify
 
    def changeset_info(self, repo_name, revision):
 
        if request.is_xhr:
 
            try:
 
                return c.rhodecode_repo.get_changeset(revision)
 
            except ChangesetDoesNotExistError, e:
 
                return EmptyChangeset(message=str(e))
 
        else:
 
            raise HTTPBadRequest()
rhodecode/controllers/compare.py
Show inline comments
 
@@ -41,6 +41,8 @@ from rhodecode.model.db import Repositor
 
from rhodecode.model.pull_request import PullRequestModel
 
from webob.exc import HTTPBadRequest
 
from rhodecode.lib.utils2 import str2bool
 
from rhodecode.lib.diffs import LimitedDiffContainer
 
from rhodecode.lib.vcs.backends.base import EmptyChangeset
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -87,13 +89,16 @@ class CompareController(BaseRepoControll
 
        org_ref = (org_ref_type, org_ref)
 
        other_ref = (other_ref_type, other_ref)
 
        other_repo = request.GET.get('repo', org_repo)
 
        bundle_compare = str2bool(request.GET.get('bundle', True))
 
        incoming_changesets = str2bool(request.GET.get('bundle', False))
 
        c.fulldiff = fulldiff = request.GET.get('fulldiff')
 
        rev_start = request.GET.get('rev_start')
 
        rev_end = request.GET.get('rev_end')
 

	
 
        c.swap_url = h.url('compare_url', repo_name=other_repo,
 
              org_ref_type=other_ref[0], org_ref=other_ref[1],
 
              other_ref_type=org_ref[0], other_ref=org_ref[1],
 
              repo=org_repo, as_form=request.GET.get('as_form'),
 
              bundle=bundle_compare)
 
              bundle=incoming_changesets)
 

	
 
        c.org_repo = org_repo = Repository.get_by_repo_name(org_repo)
 
        c.other_repo = other_repo = Repository.get_by_repo_name(other_repo)
 
@@ -102,15 +107,25 @@ class CompareController(BaseRepoControll
 
            log.error('Could not found repo %s or %s' % (org_repo, other_repo))
 
            raise HTTPNotFound
 

	
 
        if c.org_repo.scm_instance.alias != 'hg':
 
            log.error('Review not available for GIT REPOS')
 
        if c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo):
 
            log.error('compare of two remote repos not available for GIT REPOS')
 
            raise HTTPNotFound
 

	
 
        if c.org_repo.scm_instance.alias != c.other_repo.scm_instance.alias:
 
            log.error('compare of two different kind of remote repos not available')
 
            raise HTTPNotFound
 

	
 
        partial = request.environ.get('HTTP_X_PARTIAL_XHR')
 
        self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial)
 
        self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial)
 

	
 
        if rev_start and rev_end:
 
            #replace our org_ref with given CS
 
            org_ref = ('rev', rev_start)
 
            other_ref = ('rev', rev_end)
 

	
 
        c.cs_ranges, discovery_data = PullRequestModel().get_compare_data(
 
                                    org_repo, org_ref, other_repo, other_ref
 
                                    org_repo, org_ref, other_repo, other_ref,
 
                                    )
 

	
 
        c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in
 
@@ -121,28 +136,46 @@ class CompareController(BaseRepoControll
 
        if partial:
 
            return render('compare/compare_cs.html')
 

	
 
        if not bundle_compare and c.cs_ranges:
 
            # case we want a simple diff without incoming changesets, just
 
            # for review purposes. Make the diff on the forked repo, with
 
            # revision that is common ancestor
 
            other_ref = ('rev', c.cs_ranges[-1].parents[0].raw_id)
 
            other_repo = org_repo
 

	
 
        c.org_ref = org_ref[1]
 
        c.other_ref = other_ref[1]
 

	
 
        _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref,
 
                             discovery_data, bundle_compare=bundle_compare)
 
        diff_processor = diffs.DiffProcessor(_diff, format='gitdiff')
 
        if not incoming_changesets and c.cs_ranges and c.org_repo != c.other_repo:
 
            # case we want a simple diff without incoming changesets, just
 
            # for review purposes. Make the diff on the forked repo, with
 
            # revision that is common ancestor
 
            _org_ref = org_ref
 
            org_ref = ('rev', getattr(c.cs_ranges[0].parents[0]
 
                                      if c.cs_ranges[0].parents
 
                                      else EmptyChangeset(), 'raw_id'))
 
            log.debug('Changed org_ref from %s to %s' % (_org_ref, org_ref))
 
            other_repo = org_repo
 

	
 
        diff_limit = self.cut_off_limit if not fulldiff else None
 

	
 
        _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref,
 
                             discovery_data,
 
                             remote_compare=incoming_changesets)
 

	
 
        diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
 
                                             diff_limit=diff_limit)
 
        _parsed = diff_processor.prepare()
 

	
 
        c.limited_diff = False
 
        if isinstance(_parsed, LimitedDiffContainer):
 
            c.limited_diff = True
 

	
 
        c.files = []
 
        c.changes = {}
 

	
 
        c.lines_added = 0
 
        c.lines_deleted = 0
 
        for f in _parsed:
 
            st = f['stats']
 
            if st[0] != 'b':
 
                c.lines_added += st[0]
 
                c.lines_deleted += st[1]
 
            fid = h.FID('', f['filename'])
 
            c.files.append([fid, f['operation'], f['filename'], f['stats']])
 
            diff = diff_processor.as_html(enable_comments=False, diff_lines=[f])
 
            diff = diff_processor.as_html(enable_comments=False, parsed_lines=[f])
 
            c.changes[fid] = [f['operation'], f['filename'], diff]
 

	
 
        return render('compare/compare_diff.html')
rhodecode/controllers/feed.py
Show inline comments
 
@@ -28,12 +28,15 @@ import logging
 
from pylons import url, response, tmpl_context as c
 
from pylons.i18n.translation import _
 

	
 
from beaker.cache import cache_region, region_invalidate
 
from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController
 
from rhodecode.lib.diffs import DiffProcessor
 
from rhodecode.lib.diffs import DiffProcessor, LimitedDiffContainer
 
from rhodecode.model.db import CacheInvalidation
 
from rhodecode.lib.utils2 import safe_int, str2bool
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -50,7 +53,13 @@ class FeedController(BaseRepoController)
 
        self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s')
 
        self.language = 'en-us'
 
        self.ttl = "5"
 
        self.feed_nr = 20
 
        import rhodecode
 
        CONF = rhodecode.CONFIG
 
        self.include_diff = str2bool(CONF.get('rss_include_diff', False))
 
        self.feed_nr = safe_int(CONF.get('rss_items_per_page', 20))
 
        # we need to protect from parsing huge diffs here other way
 
        # we can kill the server
 
        self.feed_diff_limit = safe_int(CONF.get('rss_cut_off_limit', 32 * 1024))
 

	
 
    def _get_title(self, cs):
 
        return "%s" % (
 
@@ -59,36 +68,58 @@ class FeedController(BaseRepoController)
 

	
 
    def __changes(self, cs):
 
        changes = []
 
        _diff = cs.diff()
 
        # we need to protect from parsing huge diffs here other way
 
        # we can kill the server, 32*1024 chars is a reasonable limit
 
        HUGE_DIFF = 32 * 1024
 
        if len(_diff) > HUGE_DIFF:
 
            changes = ['\n ' + _('Changeset was too big and was cut off...')]
 
            return changes
 
        diffprocessor = DiffProcessor(_diff)
 
        stats = diffprocessor.prepare(inline_diff=False)
 
        for st in stats:
 
        diff_processor = DiffProcessor(cs.diff(),
 
                                       diff_limit=self.feed_diff_limit)
 
        _parsed = diff_processor.prepare(inline_diff=False)
 
        limited_diff = False
 
        if isinstance(_parsed, LimitedDiffContainer):
 
            limited_diff = True
 

	
 
        for st in _parsed:
 
            st.update({'added': st['stats'][0],
 
                       'removed': st['stats'][1]})
 
            changes.append('\n %(operation)s %(filename)s '
 
                           '(%(added)s lines added, %(removed)s lines removed)'
 
                            % st)
 
        return changes
 
        if limited_diff:
 
            changes = changes + ['\n ' +
 
                                 _('Changeset was too big and was cut off...')]
 
        return diff_processor, changes
 

	
 
    def __get_desc(self, cs):
 
        desc_msg = []
 
        desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'),
 
        desc_msg.append('%s %s %s<br/>' % (h.person(cs.author),
 
                                           _('commited on'),
 
                                           h.fmt_date(cs.date)))
 
        #branches, tags, bookmarks
 
        if cs.branch:
 
            desc_msg.append('branch: %s<br/>' % cs.branch)
 
        if h.is_hg(c.rhodecode_repo):
 
            for book in cs.bookmarks:
 
                desc_msg.append('bookmark: %s<br/>' % book)
 
        for tag in cs.tags:
 
            desc_msg.append('tag: %s<br/>' % tag)
 
        diff_processor, changes = self.__changes(cs)
 
        # rev link
 
        _url = url('changeset_home', repo_name=cs.repository.name,
 
                   revision=cs.raw_id, qualified=True)
 
        desc_msg.append('changesest: <a href="%s">%s</a>' % (_url, cs.raw_id[:8]))
 

	
 
        desc_msg.append('<pre>')
 
        desc_msg.append(cs.message)
 
        desc_msg.append('\n')
 
        desc_msg.extend(self.__changes(cs))
 
        desc_msg.extend(changes)
 
        if self.include_diff:
 
            desc_msg.append('\n\n')
 
            desc_msg.append(diff_processor.as_raw())
 
        desc_msg.append('</pre>')
 
        return desc_msg
 

	
 
    def atom(self, repo_name):
 
        """Produce an atom-1.0 feed via feedgenerator module"""
 

	
 
        @cache_region('long_term')
 
        def _get_feed_from_cache(key):
 
        feed = Atom1Feed(
 
             title=self.title % repo_name,
 
             link=url('summary_home', repo_name=repo_name,
 
@@ -110,8 +141,18 @@ class FeedController(BaseRepoController)
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
 

	
 
        key = repo_name + '_ATOM'
 
        inv = CacheInvalidation.invalidate(key)
 
        if inv is not None:
 
            region_invalidate(_get_feed_from_cache, None, key)
 
            CacheInvalidation.set_valid(inv.cache_key)
 
        return _get_feed_from_cache(key)
 

	
 
    def rss(self, repo_name):
 
        """Produce an rss2 feed via feedgenerator module"""
 

	
 
        @cache_region('long_term')
 
        def _get_feed_from_cache(key):
 
        feed = Rss201rev2Feed(
 
            title=self.title % repo_name,
 
            link=url('summary_home', repo_name=repo_name,
 
@@ -132,3 +173,10 @@ class FeedController(BaseRepoController)
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
 

	
 
        key = repo_name + '_RSS'
 
        inv = CacheInvalidation.invalidate(key)
 
        if inv is not None:
 
            region_invalidate(_get_feed_from_cache, None, key)
 
            CacheInvalidation.set_valid(inv.cache_key)
 
        return _get_feed_from_cache(key)
rhodecode/controllers/files.py
Show inline comments
 
@@ -31,20 +31,22 @@ import tempfile
 
from pylons import request, response, tmpl_context as c, url
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons.decorators import jsonify
 
from rhodecode.lib.utils import jsonify
 

	
 
from rhodecode.lib import diffs
 
from rhodecode.lib import helpers as h
 

	
 
from rhodecode.lib.compat import OrderedDict
 
from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str
 
from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str,\
 
    str2bool
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
from rhodecode.lib.vcs.conf import settings
 
from rhodecode.lib.vcs.exceptions import RepositoryError, \
 
    ChangesetDoesNotExistError, EmptyRepositoryError, \
 
    ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError
 
    ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,\
 
    NodeDoesNotExistError, ChangesetError, NodeError
 
from rhodecode.lib.vcs.nodes import FileNode
 

	
 
from rhodecode.model.repo import RepoModel
 
@@ -153,9 +155,16 @@ class FilesController(BaseRepoController
 
            c.file = c.changeset.get_node(f_path)
 

	
 
            if c.file.is_file():
 
                _hist = c.changeset.get_file_history(f_path)
 
                c.file_history = self._get_node_history(c.changeset, f_path,
 
                                                        _hist)
 
                c.load_full_history = False
 
                file_last_cs = c.file.last_changeset
 
                c.file_changeset = (c.changeset
 
                                    if c.changeset.revision < file_last_cs.revision
 
                                    else file_last_cs)
 
                _hist = []
 
                c.file_history = []
 
                if c.load_full_history:
 
                    c.file_history, _hist = self._get_node_history(c.changeset, f_path)
 

	
 
                c.authors = []
 
                for a in set([x.author for x in _hist]):
 
                    c.authors.append((h.email(a), h.person(a)))
 
@@ -171,6 +180,23 @@ class FilesController(BaseRepoController
 

	
 
        return render('files/files.html')
 

	
 
    def history(self, repo_name, revision, f_path, annotate=False):
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            c.changeset = self.__get_cs_or_redirect(revision, repo_name)
 
            c.f_path = f_path
 
            c.annotate = annotate
 
            c.file = c.changeset.get_node(f_path)
 
            if c.file.is_file():
 
                file_last_cs = c.file.last_changeset
 
                c.file_changeset = (c.changeset
 
                                    if c.changeset.revision < file_last_cs.revision
 
                                    else file_last_cs)
 
                c.file_history, _hist = self._get_node_history(c.changeset, f_path)
 
                c.authors = []
 
                for a in set([x.author for x in _hist]):
 
                    c.authors.append((h.email(a), h.person(a)))
 
                return render('files/files_history_box.html')
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
@@ -430,21 +456,47 @@ class FilesController(BaseRepoController
 
        c.context_url = _context_url
 
        c.changes = OrderedDict()
 
        c.changes[diff2] = []
 

	
 
        #special case if we want a show rev only, it's impl here
 
        #to reduce JS and callbacks
 

	
 
        if request.GET.get('show_rev'):
 
            if str2bool(request.GET.get('annotate', 'False')):
 
                _url = url('files_annotate_home', repo_name=c.repo_name,
 
                           revision=diff1, f_path=c.f_path)
 
            else:
 
                _url = url('files_home', repo_name=c.repo_name,
 
                           revision=diff1, f_path=c.f_path)
 

	
 
            return redirect(_url)
 
        try:
 
            if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
 
                c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
 
                try:
 
                node1 = c.changeset_1.get_node(f_path)
 
                except NodeDoesNotExistError:
 
                    c.changeset_1 = EmptyChangeset(cs=diff1,
 
                                                   revision=c.changeset_1.revision,
 
                                                   repo=c.rhodecode_repo)
 
                    node1 = FileNode(f_path, '', changeset=c.changeset_1)
 
            else:
 
                c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
 
                node1 = FileNode('.', '', changeset=c.changeset_1)
 
                node1 = FileNode(f_path, '', changeset=c.changeset_1)
 

	
 
            if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
 
                c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
 
                try:
 
                node2 = c.changeset_2.get_node(f_path)
 
                except NodeDoesNotExistError:
 
                    c.changeset_2 = EmptyChangeset(cs=diff2,
 
                                                   revision=c.changeset_2.revision,
 
                                                   repo=c.rhodecode_repo)
 
                    node2 = FileNode(f_path, '', changeset=c.changeset_2)
 
            else:
 
                c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
 
                node2 = FileNode('.', '', changeset=c.changeset_2)
 
        except RepositoryError:
 
                node2 = FileNode(f_path, '', changeset=c.changeset_2)
 
        except (RepositoryError, NodeError):
 
            log.error(traceback.format_exc())
 
            return redirect(url('files_home', repo_name=c.repo_name,
 
                                f_path=f_path))
 

	
 
@@ -459,7 +511,7 @@ class FilesController(BaseRepoController
 
            response.content_disposition = (
 
                'attachment; filename=%s' % diff_name
 
            )
 
            return diff.raw_diff()
 
            return diff.as_raw()
 

	
 
        elif c.action == 'raw':
 
            _diff = diffs.get_gitdiff(node1, node2,
 
@@ -467,7 +519,7 @@ class FilesController(BaseRepoController
 
                                      context=line_context)
 
            diff = diffs.DiffProcessor(_diff, format='gitdiff')
 
            response.content_type = 'text/plain'
 
            return diff.raw_diff()
 
            return diff.as_raw()
 

	
 
        else:
 
            fid = h.FID(diff2, node2.path)
 
@@ -481,13 +533,31 @@ class FilesController(BaseRepoController
 
                                         ignore_whitespace=ign_whitespace_lcl,
 
                                         line_context=line_context_lcl,
 
                                         enable_comments=False)
 

	
 
            c.changes = [('', node2, diff, cs1, cs2, st,)]
 
            op = ''
 
            filename = node1.path
 
            cs_changes = {
 
                'fid': [cs1, cs2, op, filename, diff, st]
 
            }
 
            c.changes = cs_changes
 

	
 
        return render('files/file_diff.html')
 

	
 
    def _get_node_history(self, cs, f_path, changesets=None):
 
        """
 
        get changesets history for given node
 

	
 
        :param cs: changeset to calculate history
 
        :param f_path: path for node to calculate history for
 
        :param changesets: if passed don't calculate history and take
 
            changesets defined in this list
 
        """
 
        # calculate history based on tip
 
        tip_cs = c.rhodecode_repo.get_changeset()
 
        if changesets is None:
 
            try:
 
                changesets = tip_cs.get_file_history(f_path)
 
            except (NodeDoesNotExistError, ChangesetError):
 
                #this node is not present at tip !
 
            changesets = cs.get_file_history(f_path)
 
        hist_l = []
 

	
 
@@ -496,10 +566,10 @@ class FilesController(BaseRepoController
 
        tags_group = ([], _("Tags"))
 
        _hg = cs.repository.alias == 'hg'
 
        for chs in changesets:
 
            _branch = '(%s)' % chs.branch if _hg else ''
 
            n_desc = 'r%s:%s %s' % (chs.revision, chs.short_id, _branch)
 
            #_branch = '(%s)' % chs.branch if _hg else ''
 
            _branch = chs.branch
 
            n_desc = 'r%s:%s (%s)' % (chs.revision, chs.short_id, _branch)
 
            changesets_group[0].append((chs.raw_id, n_desc,))
 

	
 
        hist_l.append(changesets_group)
 

	
 
        for name, chs in c.rhodecode_repo.branches.items():
 
@@ -510,7 +580,7 @@ class FilesController(BaseRepoController
 
            tags_group[0].append((chs, name),)
 
        hist_l.append(tags_group)
 

	
 
        return hist_l
 
        return hist_l, changesets
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
rhodecode/controllers/forks.py
Show inline comments
 
@@ -99,8 +99,8 @@ class ForksController(BaseRepoController
 
                                            c.repo_last_rev) * 100)
 

	
 
        defaults = RepoModel()._get_defaults(repo_name)
 
        # add prefix to fork
 
        defaults['repo_name'] = 'fork-' + defaults['repo_name']
 
        # add suffix to fork
 
        defaults['repo_name'] = '%s-fork' % defaults['repo_name']
 
        return defaults
 

	
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
rhodecode/controllers/home.py
Show inline comments
 
@@ -26,11 +26,16 @@
 
import logging
 

	
 
from pylons import tmpl_context as c, request
 
from pylons.i18n.translation import _
 
from webob.exc import HTTPBadRequest
 

	
 
import rhodecode
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.ext_json import json
 
from rhodecode.lib.auth import LoginRequired
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.db import Repository
 
from sqlalchemy.sql.expression import func
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -42,9 +47,63 @@ class HomeController(BaseController):
 
        super(HomeController, self).__before__()
 

	
 
    def index(self):
 
        c.repos_list = self.scm_model.get_repos()
 
        c.groups = self.scm_model.get_repos_groups()
 
        c.group = None
 

	
 
        if c.visual.lightweight_dashboard is False:
 
            c.repos_list = self.scm_model.get_repos()
 
        ## lightweight version of dashboard
 
        else:
 
            c.repos_list = Repository.query()\
 
                            .filter(Repository.group_id == None)\
 
                            .order_by(func.lower(Repository.repo_name))\
 
                            .all()
 
            repos_data = []
 
            total_records = len(c.repos_list)
 

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

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

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

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

	
 
            c.data = json.dumps({
 
                "totalRecords": total_records,
 
                "startIndex": 0,
 
                "sort": "name",
 
                "dir": "asc",
 
                "records": repos_data
 
            })
 

	
 
        return render('/index.html')
 

	
 
    def repo_switcher(self):
 
@@ -55,7 +114,7 @@ class HomeController(BaseController):
 
                                                    simple=True)
 
            return render('/repo_switcher_list.html')
 
        else:
 
            return HTTPBadRequest()
 
            raise HTTPBadRequest()
 

	
 
    def branch_tag_switcher(self, repo_name):
 
        if request.is_xhr:
 
@@ -63,4 +122,4 @@ class HomeController(BaseController):
 
            c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
 
            return render('/switch_to_list.html')
 
        else:
 
            return HTTPBadRequest()
 
            raise HTTPBadRequest()
rhodecode/controllers/journal.py
Show inline comments
 
@@ -41,7 +41,8 @@ from rhodecode.model.db import UserLog, 
 
from rhodecode.model.meta import Session
 
from sqlalchemy.sql.expression import func
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.lib.utils2 import safe_int
 
from rhodecode.lib.utils2 import safe_int, AttributeDict
 
from rhodecode.controllers.admin.admin import _journal_filter
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -53,20 +54,14 @@ class JournalController(BaseController):
 
        self.language = 'en-us'
 
        self.ttl = "5"
 
        self.feed_nr = 20
 
        c.search_term = request.GET.get('filter')
 

	
 
    @LoginRequired()
 
    @NotAnonymous()
 
    def index(self):
 
        # Return a rendered template
 
        p = safe_int(request.params.get('page', 1), 1)
 

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

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

	
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
@@ -74,8 +69,10 @@ class JournalController(BaseController):
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        c.journal_pager = Page(journal, page=p, items_per_page=20)
 
        def url_generator(**kw):
 
            return url.current(filter=c.search_term, **kw)
 

	
 
        c.journal_pager = Page(journal, page=p, items_per_page=20, url=url_generator)
 
        c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager)
 

	
 
        c.journal_data = render('journal/journal_data.html')
 
@@ -83,6 +80,17 @@ class JournalController(BaseController):
 
            return c.journal_data
 
        return render('journal/journal.html')
 

	
 
    @LoginRequired()
 
    @NotAnonymous()
 
    def index_my_repos(self):
 
        c.user = User.get(self.rhodecode_user.user_id)
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            all_repos = self.sa.query(Repository)\
 
                     .filter(Repository.user_id == c.user.user_id)\
 
                     .order_by(func.lower(Repository.repo_name)).all()
 
            c.user_repos = ScmModel().get_repos(all_repos)
 
            return render('journal/journal_page_repos.html')
 

	
 
    @LoginRequired(api_access=True)
 
    @NotAnonymous()
 
    def journal_atom(self):
 
@@ -111,7 +119,8 @@ class JournalController(BaseController):
 
        groups = []
 
        for k, g in groupby(journal, lambda x: x.action_as_day):
 
            user_group = []
 
            for k2, g2 in groupby(list(g), lambda x: x.user.email):
 
            #groupby username if it's a present value, else fallback to journal username
 
            for _, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username):
 
                l = list(g2)
 
                user_group.append((l[0].user, l))
 

	
 
@@ -137,8 +146,14 @@ class JournalController(BaseController):
 
        if filtering_criterion is not None:
 
            journal = self.sa.query(UserLog)\
 
                .options(joinedload(UserLog.user))\
 
                .options(joinedload(UserLog.repository))\
 
                .filter(filtering_criterion)\
 
                .options(joinedload(UserLog.repository))
 
            #filter
 
            try:
 
                journal = _journal_filter(journal, c.search_term)
 
            except:
 
                # we want this to crash for now
 
                raise
 
            journal = journal.filter(filtering_criterion)\
 
                .order_by(UserLog.action_date.desc())
 
        else:
 
            journal = []
 
@@ -213,8 +228,14 @@ class JournalController(BaseController):
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            user = entry.user
 
            if user is None:
 
                #fix deleted users
 
                user = AttributeDict({'short_contact': entry.username,
 
                                      'email': '',
 
                                      'full_contact': ''})
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
            title = "%s - %s %s" % (user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            _url = None
 
@@ -226,8 +247,8 @@ class JournalController(BaseController):
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=_url or url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          author_email=user.email,
 
                          author_name=user.full_contact,
 
                          description=desc)
 

	
 
        response.content_type = feed.mime_type
 
@@ -250,8 +271,14 @@ class JournalController(BaseController):
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            user = entry.user
 
            if user is None:
 
                #fix deleted users
 
                user = AttributeDict({'short_contact': entry.username,
 
                                      'email': '',
 
                                      'full_contact': ''})
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
            title = "%s - %s %s" % (user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            _url = None
 
@@ -263,8 +290,8 @@ class JournalController(BaseController):
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=_url or url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          author_email=user.email,
 
                          author_name=user.full_contact,
 
                          description=desc)
 

	
 
        response.content_type = feed.mime_type
rhodecode/controllers/pullrequests.py
Show inline comments
 
@@ -33,7 +33,6 @@ from itertools import groupby
 
from pylons import request, response, session, tmpl_context as c, url
 
from pylons.controllers.util import abort, redirect
 
from pylons.i18n.translation import _
 
from pylons.decorators import jsonify
 

	
 
from rhodecode.lib.compat import json
 
from rhodecode.lib.base import BaseRepoController, render
 
@@ -41,7 +40,10 @@ from rhodecode.lib.auth import LoginRequ
 
    NotAnonymous
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib import diffs
 
from rhodecode.lib.utils import action_logger
 
from rhodecode.lib.utils import action_logger, jsonify
 
from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
 
from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
from rhodecode.lib.diffs import LimitedDiffContainer
 
from rhodecode.model.db import User, PullRequest, ChangesetStatus,\
 
    ChangesetComment
 
from rhodecode.model.pull_request import PullRequestModel
 
@@ -50,7 +52,6 @@ from rhodecode.model.repo import RepoMod
 
from rhodecode.model.comment import ChangesetCommentsModel
 
from rhodecode.model.changeset_status import ChangesetStatusModel
 
from rhodecode.model.forms import PullRequestForm
 
from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -149,8 +150,8 @@ class PullrequestsController(BaseRepoCon
 
                                 self._get_repo_refs(fork.scm_instance),
 
                                 class_='refs')
 
            }
 
        #add parents of this fork also
 
        if org_repo.parent:
 
        #add parents of this fork also, but only if it's not empty
 
        if org_repo.parent and org_repo.parent.scm_instance.revisions:
 
            c.default_pull_request = org_repo.parent.repo_name
 
            c.default_pull_request_rev = self._get_default_rev(org_repo.parent)
 
            c.default_revs = self._get_repo_refs(org_repo.parent.scm_instance)
 
@@ -194,6 +195,17 @@ class PullrequestsController(BaseRepoCon
 
        revisions = _form['revisions']
 
        reviewers = _form['review_members']
 

	
 
        # if we have cherry picked pull request we don't care what is in
 
        # org_ref/other_ref
 
        rev_start = request.POST.get('rev_start')
 
        rev_end = request.POST.get('rev_end')
 

	
 
        if rev_start and rev_end:
 
            # this is swapped to simulate that rev_end is a revision from
 
            # parent of the fork
 
            org_ref = 'rev:%s:%s' % (rev_end, rev_end)
 
            other_ref = 'rev:%s:%s' % (rev_start, rev_start)
 

	
 
        title = _form['pullrequest_title']
 
        description = _form['pullrequest_desc']
 

	
 
@@ -227,7 +239,7 @@ class PullrequestsController(BaseRepoCon
 
                       request.POST.get('reviewers_ids', '').split(',')))
 

	
 
            PullRequestModel().update_reviewers(pull_request_id, reviewers_ids)
 
            Session.commit()
 
            Session().commit()
 
            return True
 
        raise HTTPForbidden()
 

	
 
@@ -241,7 +253,7 @@ class PullrequestsController(BaseRepoCon
 
            Session().commit()
 
            h.flash(_('Successfully deleted pull request'),
 
                    category='success')
 
            return redirect(url('admin_settings_my_account'))
 
            return redirect(url('admin_settings_my_account', anchor='pullrequests'))
 
        raise HTTPForbidden()
 

	
 
    def _load_compare_data(self, pull_request, enable_comments=True):
 
@@ -251,13 +263,15 @@ class PullrequestsController(BaseRepoCon
 
        :param pull_request:
 
        :type pull_request:
 
        """
 
        rev_start = request.GET.get('rev_start')
 
        rev_end = request.GET.get('rev_end')
 

	
 
        org_repo = pull_request.org_repo
 
        (org_ref_type,
 
         org_ref_name,
 
         org_ref_rev) = pull_request.org_ref.split(':')
 

	
 
        other_repo = pull_request.other_repo
 
        other_repo = org_repo
 
        (other_ref_type,
 
         other_ref_name,
 
         other_ref_rev) = pull_request.other_ref.split(':')
 
@@ -270,36 +284,48 @@ class PullrequestsController(BaseRepoCon
 
        c.org_repo = org_repo
 
        c.other_repo = other_repo
 

	
 
        c.cs_ranges, discovery_data = PullRequestModel().get_compare_data(
 
                                       org_repo, org_ref, other_repo, other_ref
 
                                      )
 
        if c.cs_ranges:
 
            # case we want a simple diff without incoming changesets, just
 
            # for review purposes. Make the diff on the forked repo, with
 
            # revision that is common ancestor
 
            other_ref = ('rev', c.cs_ranges[-1].parents[0].raw_id)
 
            other_repo = org_repo
 
        c.fulldiff = fulldiff = request.GET.get('fulldiff')
 

	
 
        c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions]
 

	
 
        other_ref = ('rev', getattr(c.cs_ranges[0].parents[0]
 
                                  if c.cs_ranges[0].parents
 
                                  else EmptyChangeset(), 'raw_id'))
 

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

	
 
        c.org_ref = org_ref[1]
 
        c.other_ref = other_ref[1]
 
        # diff needs to have swapped org with other to generate proper diff
 
        _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref,
 
                             discovery_data)
 
        diff_processor = diffs.DiffProcessor(_diff, format='gitdiff')
 

	
 
        diff_limit = self.cut_off_limit if not fulldiff else None
 

	
 
        #we swap org/other ref since we run a simple diff on one repo
 
        _diff = diffs.differ(org_repo, other_ref, other_repo, org_ref)
 

	
 
        diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
 
                                             diff_limit=diff_limit)
 
        _parsed = diff_processor.prepare()
 

	
 
        c.limited_diff = False
 
        if isinstance(_parsed, LimitedDiffContainer):
 
            c.limited_diff = True
 

	
 
        c.files = []
 
        c.changes = {}
 

	
 
        c.lines_added = 0
 
        c.lines_deleted = 0
 
        for f in _parsed:
 
            st = f['stats']
 
            if st[0] != 'b':
 
                c.lines_added += st[0]
 
                c.lines_deleted += st[1]
 
            fid = h.FID('', f['filename'])
 
            c.files.append([fid, f['operation'], f['filename'], f['stats']])
 
            diff = diff_processor.as_html(enable_comments=enable_comments,
 
                                          diff_lines=[f])
 
                                          parsed_lines=[f])
 
            c.changes[fid] = [f['operation'], f['filename'], diff]
 

	
 
    def show(self, repo_name, pull_request_id):
rhodecode/controllers/search.py
Show inline comments
 
@@ -24,7 +24,7 @@
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import logging
 
import traceback
 

	
 
import urllib
 
from pylons.i18n.translation import _
 
from pylons import request, config, tmpl_context as c
 

	
 
@@ -42,6 +42,7 @@ from whoosh.query import Phrase, Wildcar
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.lib.utils2 import safe_str, safe_int
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
@@ -116,8 +117,9 @@ class SearchController(BaseController):
 
                    )
 

	
 
                    def url_generator(**kw):
 
                        q = urllib.quote(safe_str(c.cur_query))
 
                        return update_params("?q=%s&type=%s" \
 
                        % (safe_str(c.cur_query), safe_str(c.cur_type)), **kw)
 
                        % (q, safe_str(c.cur_type)), **kw)
 
                    repo_location = RepoModel().repos_path
 
                    c.formated_results = Page(
 
                        WhooshResultWrapper(search_type, searcher, matcher,
rhodecode/controllers/settings.py
Show inline comments
 
@@ -65,11 +65,18 @@ class SettingsController(BaseRepoControl
 
        choices, c.landing_revs = ScmModel().get_repo_landing_revs()
 
        c.landing_revs_choices = choices
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def index(self, repo_name):
 
        repo_model = RepoModel()
 
        c.repo_info = repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
    def __load_data(self, repo_name=None):
 
        """
 
        Load defaults settings for edit, and update
 

	
 
        :param repo_name:
 
        """
 
        self.__load_defaults()
 

	
 
        c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
 
        repo = db_repo.scm_instance
 

	
 
        if c.repo_info is None:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was created or renamed from the file system'
 
                      ' please run the application again'
 
@@ -78,10 +85,18 @@ class SettingsController(BaseRepoControl
 

	
 
            return redirect(url('home'))
 

	
 
        self.__load_defaults()
 
        ##override defaults for exact repo info here git/hg etc
 
        choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
 
        c.landing_revs_choices = choices
 

	
 
        defaults = RepoModel()._get_defaults(repo_name)
 

	
 
        return defaults
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def index(self, repo_name):
 
        defaults = self.__load_data(repo_name)
 

	
 
        return htmlfill.render(
 
            render('settings/repo_settings.html'),
 
            defaults=defaults,
 
@@ -91,10 +106,12 @@ class SettingsController(BaseRepoControl
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def update(self, repo_name):
 
        self.__load_defaults()
 
        repo_model = RepoModel()
 
        changed_name = repo_name
 

	
 
        self.__load_defaults()
 
        #override the choices with extracted revisions !
 
        choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo_name)
 
        c.landing_revs_choices = choices
 

	
 
        _form = RepoSettingsForm(edit=True,
 
                                 old_data={'repo_name': repo_name},
 
@@ -102,8 +119,7 @@ class SettingsController(BaseRepoControl
 
                                 landing_revs=c.landing_revs_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 

	
 
            repo_model.update(repo_name, form_result)
 
            repo_model.update(repo_name, **form_result)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('Repository %s updated successfully') % repo_name,
 
                    category='success')
 
@@ -112,15 +128,15 @@ class SettingsController(BaseRepoControl
 
                          changed_name, self.ip_addr, self.sa)
 
            Session().commit()
 
        except formencode.Invalid, errors:
 
            c.repo_info = repo_model.get_by_repo_name(repo_name)
 
            c.users_array = repo_model.get_users_js()
 
            errors.value.update({'user': c.repo_info.user.username})
 
            defaults = self.__load_data(repo_name)
 
            defaults.update(errors.value)
 
            return htmlfill.render(
 
                render('settings/repo_settings.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of repository %s') \
 
@@ -160,7 +176,7 @@ class SettingsController(BaseRepoControl
 
            h.flash(_('An error occurred during deletion of %s') % repo_name,
 
                    category='error')
 

	
 
        return redirect(url('home'))
 
        return redirect(url('admin_settings_my_account', anchor='my'))
 

	
 
    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
 
    def toggle_locking(self, repo_name):
rhodecode/controllers/shortlog.py
Show inline comments
 
@@ -26,12 +26,16 @@
 
import logging
 

	
 
from pylons import tmpl_context as c, request, url
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.helpers import RepoPage
 
from pylons.controllers.util import redirect
 
from rhodecode.lib.utils2 import safe_int
 
from rhodecode.lib.vcs.exceptions import NodeDoesNotExistError, ChangesetError,\
 
    RepositoryError
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -44,19 +48,56 @@ class ShortlogController(BaseRepoControl
 
    def __before__(self):
 
        super(ShortlogController, self).__before__()
 

	
 
    def index(self, repo_name):
 
    def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True):
 
        """
 
        Safe way to get changeset if error occur it redirects to tip with
 
        proper message
 

	
 
        :param rev: revision to fetch
 
        :param repo_name: repo name to redirect after
 
        """
 

	
 
        try:
 
            return c.rhodecode_repo.get_changeset(rev)
 
        except RepositoryError, e:
 
            h.flash(str(e), category='warning')
 
            redirect(h.url('shortlog_home', repo_name=repo_name))
 

	
 
    def index(self, repo_name, revision=None, f_path=None):
 
        p = safe_int(request.params.get('page', 1), 1)
 
        size = safe_int(request.params.get('size', 20), 20)
 
        collection = c.rhodecode_repo
 
        c.file_history = f_path
 

	
 
        def url_generator(**kw):
 
            if f_path:
 
                return url('shortlog_file_home', repo_name=repo_name,
 
                           revision=revision, f_path=f_path, size=size, **kw)
 
            return url('shortlog_home', repo_name=repo_name, size=size, **kw)
 

	
 
        c.repo_changesets = RepoPage(c.rhodecode_repo, page=p,
 
        if f_path:
 
            log.debug('generating shortlog for path %s' % f_path)
 
            # get the history for the file !
 
            tip_cs = c.rhodecode_repo.get_changeset()
 
            try:
 
                collection = tip_cs.get_file_history(f_path)
 
            except (NodeDoesNotExistError, ChangesetError):
 
                #this node is not present at tip !
 
                try:
 
                    cs = self.__get_cs_or_redirect(revision, repo_name)
 
                    collection = cs.get_file_history(f_path)
 
                except RepositoryError, e:
 
                    h.flash(str(e), category='warning')
 
                    redirect(h.url('shortlog_home', repo_name=repo_name))
 
            collection = list(reversed(collection))
 

	
 
        c.repo_changesets = RepoPage(collection, page=p,
 
                                    items_per_page=size, url=url_generator)
 
        page_revisions = [x.raw_id for x in list(c.repo_changesets)]
 
        c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
 

	
 
        if not c.repo_changesets:
 
            h.flash(_('There are no changesets yet'), category='warning')
 
            return redirect(url('summary_home', repo_name=repo_name))
 

	
 
        c.shortlog_data = render('shortlog/shortlog_data.html')
rhodecode/controllers/summary.py
Show inline comments
 
@@ -97,7 +97,7 @@ class SummaryController(BaseRepoControll
 
        uri_tmpl = uri_tmpl.replace('{', '%(').replace('}', ')s')
 
        decoded_path = safe_unicode(urllib.unquote(parsed_url.path))
 
        uri_dict = {
 
           'user': username,
 
           'user': urllib.quote(username),
 
           'pass': password,
 
           'scheme': parsed_url.scheme,
 
           'netloc': parsed_url.netloc,
rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo
Show inline comments
 
binary diff not shown
rhodecode/i18n/en/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -7,7 +7,7 @@ msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-09-02 20:30+0200\n"
 
"POT-Creation-Date: 2012-12-03 03:21+0100\n"
 
"PO-Revision-Date: 2011-02-25 19:13+0100\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: en <LL@li.org>\n"
 
@@ -17,35 +17,38 @@ msgstr ""
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:94
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:83
 
#: rhodecode/controllers/changeset.py:84
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
 
#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98
 
msgid "ignore white space"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/changeset.py:333
 
#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:408
 
#: rhodecode/controllers/changeset.py:315
 
#: rhodecode/controllers/pullrequests.py:411
 
#, python-format
 
msgid "Status change -> %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:346
 
msgid ""
 
"Changing status on a changeset associated witha closed pull request is "
 
"not allowed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/compare.py:69
 
#: rhodecode/controllers/compare.py:75
 
#: rhodecode/controllers/pullrequests.py:117
 
#: rhodecode/controllers/shortlog.py:100
 
msgid "There are no changesets yet"
 
msgstr ""
 

	
 
@@ -75,99 +78,109 @@ msgid ""
 
"fulfilling the request."
 
msgstr ""
 

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

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

	
 
#: rhodecode/controllers/feed.py:75
 
#: rhodecode/controllers/feed.py:86
 
#: rhodecode/templates/changeset/changeset.html:126
 
#: rhodecode/templates/changeset/changeset.html:138
 
#: rhodecode/templates/compare/compare_diff.html:62
 
#: rhodecode/templates/compare/compare_diff.html:73
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:94
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:153
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:92
 
msgid "commited on"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:84
 
#: rhodecode/controllers/files.py:86
 
msgid "click here to add new file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:85
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299
 
#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
 
#, python-format
 
msgid "This repository is has been locked by %s on %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:266
 
#: rhodecode/controllers/files.py:292
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:271
 
#: rhodecode/controllers/files.py:297
 
msgid "No changes"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352
 
#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
 
msgid "Error occurred during commit"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:318
 
#: rhodecode/controllers/files.py:344
 
#, python-format
 
msgid "Added %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:332
 
#: rhodecode/controllers/files.py:358
 
msgid "No content"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:336
 
#: rhodecode/controllers/files.py:362
 
msgid "No filename"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:378
 
#: rhodecode/controllers/files.py:404
 
msgid "downloads disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:389
 
#: rhodecode/controllers/files.py:415
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:391
 
#: rhodecode/controllers/files.py:417
 
msgid "Empty repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:393
 
#: rhodecode/controllers/files.py:419
 
msgid "Unknown archive type"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72
 
#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543
 
#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76
 
#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
 
msgid "Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76
 
#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554
 
#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80
 
#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
 
msgid "Tags"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90
 
#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
@@ -175,7 +188,7 @@ msgid ""
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72
 
#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
@@ -183,22 +196,22 @@ msgid ""
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:167
 
#: rhodecode/controllers/forks.py:168
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:181
 
#: rhodecode/controllers/forks.py:182
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239
 
msgid "public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243
 
#: rhodecode/templates/base/base.html:220
 
msgid "public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247
 
#: rhodecode/templates/base/base.html:232
 
msgid "journal"
 
msgstr ""
 

	
 
@@ -216,56 +229,56 @@ msgid ""
 
"email"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/pullrequests.py:158
 
#: rhodecode/controllers/pullrequests.py:186
 
msgid "Pull request requires a title with min. 3 chars"
 
msgstr ""
 

	
 
#: rhodecode/controllers/pullrequests.py:160
 
#: rhodecode/controllers/pullrequests.py:188
 
msgid "error during creation of pull request"
 
msgstr ""
 

	
 
#: rhodecode/controllers/pullrequests.py:181
 
#: rhodecode/controllers/pullrequests.py:220
 
msgid "Successfully opened new pull request"
 
msgstr ""
 

	
 
#: rhodecode/controllers/pullrequests.py:184
 
#: rhodecode/controllers/pullrequests.py:223
 
msgid "Error occurred during sending pull request"
 
msgstr ""
 

	
 
#: rhodecode/controllers/pullrequests.py:217
 
#: rhodecode/controllers/pullrequests.py:256
 
msgid "Successfully deleted pull request"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:131
 
#: rhodecode/controllers/search.py:134
 
msgid "Invalid search query. Try quoting it."
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:136
 
#: rhodecode/controllers/search.py:139
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:140
 
#: rhodecode/controllers/search.py:143
 
msgid "An error occurred during this search operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:107
 
#: rhodecode/controllers/admin/repos.py:266
 
#: rhodecode/controllers/settings.py:108
 
#: rhodecode/controllers/admin/repos.py:268
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:125
 
#: rhodecode/controllers/admin/repos.py:284
 
#: rhodecode/controllers/settings.py:126
 
#: rhodecode/controllers/admin/repos.py:286
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:143
 
#: rhodecode/controllers/admin/repos.py:302
 
#: rhodecode/controllers/settings.py:144
 
#: rhodecode/controllers/admin/repos.py:304
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
@@ -273,28 +286,54 @@ msgid ""
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:314
 
#: rhodecode/controllers/settings.py:156
 
#: rhodecode/controllers/admin/repos.py:316
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:159
 
#: rhodecode/controllers/admin/repos.py:324
 
#: rhodecode/controllers/admin/repos.py:330
 
#: rhodecode/controllers/settings.py:160
 
#: rhodecode/controllers/admin/repos.py:326
 
#: rhodecode/controllers/admin/repos.py:332
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
#: rhodecode/controllers/settings.py:179
 
msgid "unlocked"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:182
 
msgid "locked"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:184
 
#, python-format
 
msgid "Repository has been %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:188
 
#: rhodecode/controllers/admin/repos.py:424
 
msgid "An error occurred during unlocking"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:140
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:148
 
#: rhodecode/controllers/summary.py:144
 
#: rhodecode/templates/summary/summary.html:157
 
msgid "Statistics are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/defaults.py:96
 
msgid "Default settings updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/defaults.py:110
 
msgid "error occurred during update of defaults"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "BASE"
 
msgstr ""
 
@@ -352,18 +391,23 @@ msgid "error occurred during update of l
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:59
 
#: rhodecode/controllers/admin/permissions.py:63
 
msgid "None"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:60
 
#: rhodecode/controllers/admin/permissions.py:64
 
msgid "Read"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:61
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "Write"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:62
 
#: rhodecode/controllers/admin/permissions.py:66
 
#: rhodecode/templates/admin/defaults/defaults.html:9
 
#: rhodecode/templates/admin/ldap/ldap.html:9
 
#: rhodecode/templates/admin/permissions/permissions.html:9
 
#: rhodecode/templates/admin/repos/repo_add.html:9
 
@@ -376,229 +420,225 @@ msgstr ""
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/admin/users/user_add.html:8
 
#: rhodecode/templates/admin/users/user_edit.html:9
 
#: rhodecode/templates/admin/users/user_edit.html:122
 
#: rhodecode/templates/admin/users/user_edit.html:126
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:8
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
#: rhodecode/templates/base/base.html:197
 
#: rhodecode/templates/base/base.html:337
 
#: rhodecode/templates/base/base.html:339
 
#: rhodecode/templates/base/base.html:341
 
#: rhodecode/templates/base/base.html:350
 
#: rhodecode/templates/base/base.html:352
 
#: rhodecode/templates/base/base.html:354
 
msgid "Admin"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgid "disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
#: rhodecode/controllers/admin/permissions.py:74
 
msgid "allowed with manual account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:73
 
msgid "allowed with automatic account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:75
 
#: rhodecode/controllers/admin/permissions.py:78
 
msgid "Disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
#: rhodecode/controllers/admin/permissions.py:75
 
#: rhodecode/controllers/admin/permissions.py:76
 
#: rhodecode/controllers/admin/permissions.py:79
 
msgid "Enabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:116
 
#: rhodecode/controllers/admin/permissions.py:122
 
msgid "Default permissions updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:130
 
#: rhodecode/controllers/admin/permissions.py:136
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:123
 
#: rhodecode/controllers/admin/repos.py:125
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:192
 
#: rhodecode/controllers/admin/repos.py:194
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:196
 
#: rhodecode/controllers/admin/repos.py:198
 
#, python-format
 
msgid "created repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:227
 
#: rhodecode/controllers/admin/repos.py:229
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:319
 
#: rhodecode/controllers/admin/repos.py:321
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:348
 
#: rhodecode/controllers/admin/repos.py:350
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:367
 
#: rhodecode/controllers/admin/repos.py:369
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:385
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:402
 
#: rhodecode/controllers/admin/repos.py:404
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:422
 
msgid "An error occurred during unlocking"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:442
 
#: rhodecode/controllers/admin/repos.py:444
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:446
 
#: rhodecode/controllers/admin/repos.py:448
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299
 
#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:464
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:466
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:468
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

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

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

	
 
#: rhodecode/controllers/admin/repos.py:486
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:488
 
#: rhodecode/controllers/admin/repos.py:490
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:116
 
#: rhodecode/controllers/admin/repos_groups.py:120
 
#, python-format
 
msgid "created repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:129
 
#: rhodecode/controllers/admin/repos_groups.py:133
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:163
 
#: rhodecode/controllers/admin/repos_groups.py:167
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:176
 
#: rhodecode/controllers/admin/repos_groups.py:180
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:194
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:202
 
#: rhodecode/controllers/admin/repos_groups.py:206
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:208
 
#: rhodecode/controllers/admin/repos_groups.py:212
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:213
 
#: rhodecode/controllers/admin/repos_groups.py:218
 
#: rhodecode/controllers/admin/repos_groups.py:217
 
#: rhodecode/controllers/admin/repos_groups.py:222
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:238
 
#: rhodecode/controllers/admin/repos_groups.py:243
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:258
 
#: rhodecode/controllers/admin/repos_groups.py:264
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:121
 
#: rhodecode/controllers/admin/settings.py:123
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
#: rhodecode/controllers/admin/settings.py:131
 
msgid "Whoosh reindex task scheduled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:160
 
#: rhodecode/controllers/admin/settings.py:162
 
msgid "Updated application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:164
 
#: rhodecode/controllers/admin/settings.py:275
 
#: rhodecode/controllers/admin/settings.py:166
 
#: rhodecode/controllers/admin/settings.py:299
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:200
 
#: rhodecode/controllers/admin/settings.py:207
 
msgid "Updated visualisation settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:205
 
#: rhodecode/controllers/admin/settings.py:212
 
msgid "error occurred during updating visualisation settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:271
 
#: rhodecode/controllers/admin/settings.py:295
 
msgid "Updated VCS settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:285
 
#: rhodecode/controllers/admin/settings.py:309
 
msgid "Added new hook"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:297
 
#: rhodecode/controllers/admin/settings.py:321
 
msgid "Updated hooks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:301
 
#: rhodecode/controllers/admin/settings.py:325
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:320
 
#: rhodecode/controllers/admin/settings.py:344
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:375
 
#: rhodecode/controllers/admin/settings.py:399
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:406
 
#: rhodecode/controllers/admin/settings.py:430
 
msgid "Your account was updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:421
 
#: rhodecode/controllers/admin/users.py:191
 
#: rhodecode/controllers/admin/settings.py:445
 
#: rhodecode/controllers/admin/users.py:196
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 
@@ -613,97 +653,97 @@ msgstr ""
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:171
 
#: rhodecode/controllers/admin/users.py:176
 
msgid "User updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:207
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:212
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:217
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:226
 
#: rhodecode/controllers/admin/users.py:231
 
msgid "You can't edit this user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:266
 
#: rhodecode/controllers/admin/users.py:272
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:271
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:277
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:283
 
msgid "Granted 'repository fork' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:282
 
msgid "Revoked 'repository fork' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:288
 
#: rhodecode/controllers/admin/users_groups.py:255
 
msgid "Revoked 'repository fork' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:294
 
#: rhodecode/controllers/admin/users_groups.py:279
 
msgid "An error occurred during permissions saving"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:303
 
#, python-format
 
msgid "Added email %s to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:309
 
#, python-format
 
msgid "Added email %s to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:315
 
msgid "An error occurred during email saving"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:319
 
#: rhodecode/controllers/admin/users.py:325
 
msgid "Removed email from user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#: rhodecode/controllers/admin/users_groups.py:86
 
#, python-format
 
msgid "created users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#: rhodecode/controllers/admin/users_groups.py:97
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#: rhodecode/controllers/admin/users_groups.py:164
 
#, python-format
 
msgid "updated users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:157
 
#: rhodecode/controllers/admin/users_groups.py:186
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:174
 
#: rhodecode/controllers/admin/users_groups.py:203
 
msgid "successfully deleted users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:179
 
#: rhodecode/controllers/admin/users_groups.py:208
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:233
 
#: rhodecode/controllers/admin/users_groups.py:257
 
msgid "Granted 'repository create' permission to users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:238
 
#: rhodecode/controllers/admin/users_groups.py:262
 
msgid "Revoked 'repository create' permission to users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:244
 
#: rhodecode/controllers/admin/users_groups.py:268
 
msgid "Granted 'repository fork' permission to users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:249
 
#: rhodecode/controllers/admin/users_groups.py:273
 
msgid "Revoked 'repository fork' permission to users group"
 
msgstr ""
 

	
 
@@ -715,298 +755,323 @@ msgstr ""
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:86
 
#: rhodecode/lib/diffs.py:74
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:90
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:96
 
#: rhodecode/lib/diffs.py:100
 
msgid "No changes detected"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/lib/helpers.py:529
 
#, python-format
 
msgid "Deleted branch: %s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:532
 
#, python-format
 
msgid "Created tag: %s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:545
 
msgid "Changeset not found"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:555
 
#: rhodecode/lib/helpers.py:588
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:561
 
#: rhodecode/lib/helpers.py:594
 
msgid "compare view"
 
msgstr ""
 

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

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

	
 
#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48
 
#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51
 
msgid "revisions"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:606
 
msgid "fork name "
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:620
 
#: rhodecode/lib/helpers.py:640
 
#, python-format
 
msgid "fork name %s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:653
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:12
 
#, python-format
 
msgid "Pull request #%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:626
 
#: rhodecode/lib/helpers.py:659
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638
 
#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:630
 
#: rhodecode/lib/helpers.py:663
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640
 
#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642
 
#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:636
 
#: rhodecode/lib/helpers.py:669
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:644
 
#: rhodecode/lib/helpers.py:677
 
msgid "[created] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:646
 
#: rhodecode/lib/helpers.py:679
 
msgid "[updated] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:648
 
#: rhodecode/lib/helpers.py:681
 
msgid "[created] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:650
 
#: rhodecode/lib/helpers.py:683
 
msgid "[updated] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:652
 
#: rhodecode/lib/helpers.py:685
 
msgid "[commented] on revision in repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:654
 
#: rhodecode/lib/helpers.py:687
 
msgid "[commented] on pull request for"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:656
 
#: rhodecode/lib/helpers.py:689
 
msgid "[closed] pull request for"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:658
 
#: rhodecode/lib/helpers.py:691
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:660
 
#: rhodecode/lib/helpers.py:693
 
msgid "[committed via RhodeCode] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:662
 
#: rhodecode/lib/helpers.py:695
 
msgid "[pulled from remote] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:664
 
#: rhodecode/lib/helpers.py:697
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:666
 
#: rhodecode/lib/helpers.py:699
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:668
 
#: rhodecode/lib/helpers.py:701
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:840
 
#: rhodecode/lib/helpers.py:877
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:844
 
#: rhodecode/lib/helpers.py:881
 
msgid "No Files"
 
msgstr ""
 

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

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

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

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

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

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

	
 
#: rhodecode/lib/utils2.py:355
 
#: rhodecode/lib/utils2.py:424
 
#, python-format
 
msgid "in %s"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:426
 
#, python-format
 
msgid "%s ago"
 
msgstr ""
 

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

	
 
#: rhodecode/lib/utils2.py:431
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:360
 
#: rhodecode/lib/utils2.py:434
 
msgid "just now"
 
msgstr ""
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
#: rhodecode/lib/celerylib/tasks.py:270
 
msgid "password reset link"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180
 
msgid "Repository no access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181
 
msgid "Repository read access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182
 
msgid "Repository write access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183
 
msgid "Repository admin access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185
 
msgid "Repositories Group no access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186
 
msgid "Repositories Group read access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187
 
msgid "Repositories Group write access"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188
 
msgid "Repositories Group admin access"
 
msgstr ""
 

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

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191
 
msgid "Repository creation disabled"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192
 
msgid "Repository creation enabled"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193
 
msgid "Repository forking disabled"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194
 
msgid "Repository forking enabled"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195
 
msgid "Register disabled"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr ""
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643
 
msgid "Under Review"
 
msgstr ""
 

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

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

	
 
#: rhodecode/model/db.py:1140
 
msgid "Repository no access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1141
 
msgid "Repository read access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1142
 
msgid "Repository write access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1143
 
msgid "Repository admin access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1145
 
msgid "Repositories Group no access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1146
 
msgid "Repositories Group read access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1147
 
msgid "Repositories Group write access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1148
 
msgid "Repositories Group admin access"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1150
 
msgid "RhodeCode Administrator"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1151
 
msgid "Repository creation disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1152
 
msgid "Repository creation enabled"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1153
 
msgid "Repository forking disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1154
 
msgid "Repository forking enabled"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1155
 
msgid "Register disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1156
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1159
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1579
 
msgid "Not Reviewed"
 
msgstr ""
 

	
 
#: rhodecode/model/db.py:1580
 
msgid "Approved"
 
msgstr ""
 

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

	
 
#: rhodecode/model/db.py:1582
 
msgid "Under Review"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:43
 
msgid "Please enter a login"
 
msgstr ""
 
@@ -1026,35 +1091,41 @@ msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:220
 
msgid "commented on commit"
 
#, python-format
 
msgid "commented on commit at %(when)s"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:221
 
msgid "sent message"
 
#, python-format
 
msgid "sent message at %(when)s"
 
msgstr ""
 

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

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

	
 
#: rhodecode/model/notification.py:224
 
msgid "opened new pull request"
 
#, python-format
 
msgid "opened new pull request at %(when)s"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:225
 
msgid "commented on pull request"
 
msgstr ""
 

	
 
#: rhodecode/model/pull_request.py:84
 
#, python-format
 
msgid "commented on pull request at %(when)s"
 
msgstr ""
 

	
 
#: rhodecode/model/pull_request.py:90
 
#, python-format
 
msgid "%(user)s wants you to review pull request #%(pr_id)s"
 
msgstr ""
 

	
 
#: rhodecode/model/scm.py:535
 
#: rhodecode/model/scm.py:542
 
msgid "latest tip"
 
msgstr ""
 

	
 
@@ -1062,152 +1133,156 @@ msgstr ""
 
msgid "new user registration"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:255 rhodecode/model/user.py:277
 
#: rhodecode/model/user.py:299
 
#: rhodecode/model/user.py:255 rhodecode/model/user.py:279
 
#: rhodecode/model/user.py:301
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:323
 
#: rhodecode/model/user.py:325
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:329
 
#: rhodecode/model/user.py:331
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36
 
#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
 
msgid "Value cannot be an empty list"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:82
 
#: rhodecode/model/validators.py:83
 
#, python-format
 
msgid "Username \"%(username)s\" already exists"
 
msgstr ""
 

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

	
 
#: rhodecode/model/validators.py:86
 
#: rhodecode/model/validators.py:87
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr ""
 

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

	
 
#: rhodecode/model/validators.py:133
 
msgid "Invalid users group name"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:134
 
msgid "Invalid users group name"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:135
 
#, python-format
 
msgid "Users group \"%(usersgroup)s\" already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:136
 
#: rhodecode/model/validators.py:137
 
msgid ""
 
"users group name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:174
 
#: rhodecode/model/validators.py:175
 
msgid "Cannot assign this group as parent"
 
msgstr ""
 

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

	
 
#: rhodecode/model/validators.py:177
 
#: rhodecode/model/validators.py:178
 
#, python-format
 
msgid "Repository with name \"%(group_name)s\" already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:235
 
#: rhodecode/model/validators.py:236
 
msgid "Invalid characters (non-ascii) in password"
 
msgstr ""
 

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

	
 
#: rhodecode/model/validators.py:267
 
msgid "invalid password"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:268
 
msgid "invalid user name"
 
msgid "invalid password"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:269
 
msgid "invalid user name"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:270
 
msgid "Your account is disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:313
 
#: rhodecode/model/validators.py:314
 
#, python-format
 
msgid "Repository name %(repo)s is disallowed"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:315
 
#, python-format
 
msgid "Repository named %(repo)s already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:316
 
#, python-format
 
msgid "Repository named %(repo)s already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:317
 
#, python-format
 
msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:318
 
#: rhodecode/model/validators.py:319
 
#, python-format
 
msgid "Repositories group with name \"%(repo)s\" already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:431
 
msgid "invalid clone url"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:432
 
msgid "invalid clone url"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:433
 
msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:457
 
#: rhodecode/model/validators.py:458
 
msgid "Fork have to be the same type as parent"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:478
 
#: rhodecode/model/validators.py:473
 
msgid "You don't have permissions to create repository in this group"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:498
 
msgid "This username or users group name is not valid"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:562
 
#: rhodecode/model/validators.py:582
 
msgid "This is not a valid path"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:577
 
msgid "This e-mail address is already taken"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:597
 
msgid "This e-mail address is already taken"
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:617
 
#, python-format
 
msgid "e-mail \"%(email)s\" does not exist."
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:634
 
#: rhodecode/model/validators.py:654
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to \"username\""
 
msgstr ""
 

	
 
#: rhodecode/model/validators.py:653
 
#: rhodecode/model/validators.py:673
 
#, python-format
 
msgid "Revisions %(revs)s are already part of pull request or have set status"
 
msgstr ""
 
@@ -1230,7 +1305,7 @@ msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/repos/repos.html:9
 
#: rhodecode/templates/base/base.html:221
 
#: rhodecode/templates/base/base.html:233
 
msgid "repositories"
 
msgstr ""
 

	
 
@@ -1241,6 +1316,7 @@ msgid "ADD REPOSITORY"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/index_base.html:136
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
@@ -1250,9 +1326,10 @@ msgid "Group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/index_base.html:142
 
#: rhodecode/templates/index_base.html:168
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/index_base.html:138
 
#: rhodecode/templates/index_base.html:176
 
#: rhodecode/templates/index_base.html:266
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:75
 
#: rhodecode/templates/admin/repos/repos.html:72
 
@@ -1261,142 +1338,137 @@ msgstr ""
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:59
 
#: rhodecode/templates/settings/repo_settings.html:66
 
#: rhodecode/templates/summary/summary.html:105
 
#: rhodecode/templates/summary/summary.html:114
 
msgid "Description"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
 
msgid "Repositories group"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:166
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/index_base.html:174
 
#: rhodecode/templates/index_base.html:264
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:70
 
#: rhodecode/templates/admin/users/user_edit.html:192
 
#: rhodecode/templates/admin/users/user_edit.html:196
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:59
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:157
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:193
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:180
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:216
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:51
 
#: rhodecode/templates/branches/branches.html:50
 
#: rhodecode/templates/branches/branches_data.html:6
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:59
 
#: rhodecode/templates/journal/journal.html:107
 
#: rhodecode/templates/journal/journal.html:186
 
#: rhodecode/templates/journal/journal.html:62
 
#: rhodecode/templates/journal/journal.html:168
 
#: rhodecode/templates/journal/journal_page_repos.html:7
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:123
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/summary/summary.html:132
 
#: rhodecode/templates/tags/tags.html:51
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
msgid "Last change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:73
 
#: rhodecode/templates/index_base.html:171
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:159
 
#: rhodecode/templates/journal/journal.html:188
 
msgid "Tip"
 
msgid "Last change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:74
 
#: rhodecode/templates/index_base.html:173
 
#: rhodecode/templates/index_base.html:179
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:182
 
#: rhodecode/templates/journal/journal.html:170
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:75
 
#: rhodecode/templates/index_base.html:181
 
#: rhodecode/templates/index_base.html:269
 
#: rhodecode/templates/admin/repos/repo_edit.html:121
 
#: rhodecode/templates/admin/repos/repos.html:73
 
msgid "Owner"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:75
 
#: rhodecode/templates/summary/summary.html:48
 
#: rhodecode/templates/summary/summary.html:51
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:76
 
#: rhodecode/templates/summary/summary.html:48
 
#: rhodecode/templates/summary/summary.html:51
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:77
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:110
 
#: rhodecode/templates/index_base.html:112
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:117
 
#: rhodecode/templates/index_base.html:119
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:140
 
msgid "Group Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/index_base.html:198
 
#: rhodecode/templates/index_base.html:167
 
#: rhodecode/templates/index_base.html:207
 
#: rhodecode/templates/index_base.html:291
 
#: rhodecode/templates/admin/repos/repos.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:179
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:202
 
#: rhodecode/templates/admin/users/users.html:107
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:77
 
#: rhodecode/templates/journal/journal.html:211
 
#: rhodecode/templates/tags/tags.html:60
 
#: rhodecode/templates/branches/branches.html:76
 
#: rhodecode/templates/journal/journal.html:193
 
#: rhodecode/templates/tags/tags.html:77
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/index_base.html:199
 
#: rhodecode/templates/index_base.html:168
 
#: rhodecode/templates/index_base.html:208
 
#: rhodecode/templates/index_base.html:292
 
#: rhodecode/templates/admin/repos/repos.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:180
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:203
 
#: rhodecode/templates/admin/users/users.html:108
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:78
 
#: rhodecode/templates/journal/journal.html:212
 
#: rhodecode/templates/tags/tags.html:61
 
#: rhodecode/templates/branches/branches.html:77
 
#: rhodecode/templates/journal/journal.html:194
 
#: rhodecode/templates/tags/tags.html:78
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:169
 
#: rhodecode/templates/index_base.html:177
 
#: rhodecode/templates/index_base.html:267
 
msgid "Last Change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:200
 
#: rhodecode/templates/index_base.html:209
 
#: rhodecode/templates/index_base.html:293
 
#: rhodecode/templates/admin/repos/repos.html:96
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:181
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:204
 
#: rhodecode/templates/admin/users/users.html:109
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:79
 
#: rhodecode/templates/journal/journal.html:213
 
#: rhodecode/templates/tags/tags.html:62
 
#: rhodecode/templates/branches/branches.html:78
 
#: rhodecode/templates/journal/journal.html:195
 
#: rhodecode/templates/tags/tags.html:79
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:201
 
#: rhodecode/templates/index_base.html:210
 
#: rhodecode/templates/index_base.html:294
 
#: rhodecode/templates/admin/repos/repos.html:97
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:182
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:205
 
#: rhodecode/templates/admin/users/users.html:110
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:80
 
#: rhodecode/templates/journal/journal.html:214
 
#: rhodecode/templates/tags/tags.html:63
 
#: rhodecode/templates/branches/branches.html:79
 
#: rhodecode/templates/journal/journal.html:196
 
#: rhodecode/templates/tags/tags.html:80
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:202
 
#: rhodecode/templates/index_base.html:211
 
#: rhodecode/templates/index_base.html:295
 
#: rhodecode/templates/admin/repos/repos.html:98
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:206
 
#: rhodecode/templates/admin/users/users.html:111
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:81
 
#: rhodecode/templates/journal/journal.html:215
 
#: rhodecode/templates/tags/tags.html:64
 
#: rhodecode/templates/branches/branches.html:80
 
#: rhodecode/templates/journal/journal.html:54
 
#: rhodecode/templates/journal/journal.html:197
 
#: rhodecode/templates/tags/tags.html:81
 
msgid "Loading..."
 
msgstr ""
 

	
 
@@ -1414,7 +1486,7 @@ msgstr ""
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:122
 
#: rhodecode/templates/summary/summary.html:131
 
msgid "Username"
 
msgstr ""
 

	
 
@@ -1471,23 +1543,23 @@ msgstr ""
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit.html:108
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:124
 
#: rhodecode/templates/summary/summary.html:133
 
msgid "Email"
 
msgstr ""
 

	
 
@@ -1500,6 +1572,7 @@ msgid "Your account must wait for activa
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/defaults/defaults.html:44
 
#: rhodecode/templates/admin/repos/repo_add_base.html:65
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
#: rhodecode/templates/settings/repo_settings.html:76
 
@@ -1527,7 +1600,7 @@ msgid "tags"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
#: rhodecode/templates/tags/tags_data.html:38
 
msgid "There are no tags yet"
 
msgstr ""
 

	
 
@@ -1550,20 +1623,22 @@ msgstr ""
 
#: rhodecode/templates/admin/repos/repos.html:74
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
 
#: rhodecode/templates/journal/journal.html:61
 
#: rhodecode/templates/journal/journal.html:62
 
#: rhodecode/templates/journal/journal_page_repos.html:9
 
#: rhodecode/templates/journal/journal_page_repos.html:10
 
msgid "Action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
#: rhodecode/templates/admin/permissions/permissions.html:41
 
msgid "Repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:52
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/branches/branches.html:51
 
#: rhodecode/templates/branches/branches_data.html:7
 
#: rhodecode/templates/tags/tags.html:52
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr ""
 
@@ -1572,10 +1647,79 @@ msgstr ""
 
msgid "From IP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:53
 
#: rhodecode/templates/admin/admin_log.html:57
 
msgid "No actions yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:5
 
#: rhodecode/templates/admin/defaults/defaults.html:25
 
msgid "Repositories defaults"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:11
 
msgid "Defaults"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:35
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:48
 
#: rhodecode/templates/admin/repos/repo_add_base.html:69
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
#: rhodecode/templates/forks/fork.html:72
 
#: rhodecode/templates/settings/repo_settings.html:80
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:55
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:59
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:65
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
msgid "Enable downloads"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:69
 
#: rhodecode/templates/admin/repos/repo_edit.html:107
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:75
 
#: rhodecode/templates/admin/repos/repo_edit.html:112
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
msgid "Enable locking"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:79
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
msgid "Enable lock-by-pulling on repository."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:84
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:133
 
#: rhodecode/templates/admin/users/user_edit.html:178
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:135
 
#: rhodecode/templates/settings/repo_settings.html:93
 
msgid "Save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr ""
 
@@ -1648,18 +1792,6 @@ msgstr ""
 
msgid "E-mail Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:174
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:135
 
#: rhodecode/templates/settings/repo_settings.html:93
 
msgid "Save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
@@ -1675,8 +1807,8 @@ msgid "Comments"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:31
 
#: rhodecode/templates/base/base.html:254
 
#: rhodecode/templates/base/base.html:256
 
#: rhodecode/templates/base/base.html:267
 
#: rhodecode/templates/base/base.html:269
 
msgid "Pull requests"
 
msgstr ""
 

	
 
@@ -1704,7 +1836,7 @@ msgstr ""
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users/user_edit.html:143
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:86
 
msgid "Permissions"
 
@@ -1718,10 +1850,6 @@ msgstr ""
 
msgid "Anonymous access"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:41
 
msgid "Repository permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:49
 
msgid ""
 
"All default permissions on each repository will be reset to choosen "
 
@@ -1730,23 +1858,40 @@ msgid ""
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:50
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
msgid "overwrite existing settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:55
 
#: rhodecode/templates/admin/repos/repo_add_base.html:29
 
#: rhodecode/templates/admin/repos/repo_edit.html:49
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
 
#: rhodecode/templates/forks/fork.html:50
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:62
 
msgid ""
 
"All default permissions on each repository group will be reset to choosen"
 
" permission, note that all custom default permission on repositories "
 
"group will be lost"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:69
 
msgid "Registration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
#: rhodecode/templates/admin/permissions/permissions.html:77
 
msgid "Repository creation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:71
 
#: rhodecode/templates/admin/permissions/permissions.html:85
 
msgid "Repository forking"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:78
 
#: rhodecode/templates/admin/repos/repo_edit.html:241
 
#: rhodecode/templates/admin/permissions/permissions.html:92
 
#: rhodecode/templates/admin/repos/repo_edit.html:264
 
msgid "set"
 
msgstr ""
 

	
 
@@ -1766,8 +1911,8 @@ msgid "add new"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:20
 
#: rhodecode/templates/summary/summary.html:95
 
#: rhodecode/templates/summary/summary.html:96
 
#: rhodecode/templates/summary/summary.html:104
 
#: rhodecode/templates/summary/summary.html:105
 
msgid "Clone from"
 
msgstr ""
 

	
 
@@ -1777,24 +1922,11 @@ msgstr ""
 
msgid "Optional http[s] url from which repository should be cloned."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:29
 
#: rhodecode/templates/admin/repos/repo_edit.html:49
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
 
#: rhodecode/templates/forks/fork.html:50
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/forks/fork.html:54
 
msgid "Optionaly select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
msgid "Type of repository to create."
 
msgstr ""
 
@@ -1820,15 +1952,6 @@ msgstr ""
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:69
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
#: rhodecode/templates/forks/fork.html:72
 
#: rhodecode/templates/settings/repo_settings.html:80
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:73
 
msgid "add"
 
msgstr ""
 
@@ -1843,12 +1966,14 @@ msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:224
 
#: rhodecode/templates/admin/users/user_edit.html:226
 
#: rhodecode/templates/admin/users/user_edit.html:228
 
#: rhodecode/templates/admin/users/user_edit.html:230
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:44
 
#: rhodecode/templates/journal/journal.html:81
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
 
#: rhodecode/templates/files/files_source.html:29
 
#: rhodecode/templates/journal/journal_page_repos.html:29
 
msgid "edit"
 
msgstr ""
 

	
 
@@ -1862,31 +1987,6 @@ msgstr ""
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
msgid "Enable downloads"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:107
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:112
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
msgid "Enable locking"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
msgid "Enable lock-by-pulling on repository."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:126
 
msgid "Change owner of this repository."
 
msgstr ""
 
@@ -1894,11 +1994,11 @@ msgstr ""
 
#: rhodecode/templates/admin/repos/repo_edit.html:142
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
 
#: rhodecode/templates/admin/settings/settings.html:113
 
#: rhodecode/templates/admin/settings/settings.html:168
 
#: rhodecode/templates/admin/settings/settings.html:258
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:175
 
#: rhodecode/templates/admin/users/user_edit.html:278
 
#: rhodecode/templates/admin/settings/settings.html:179
 
#: rhodecode/templates/admin/settings/settings.html:269
 
#: rhodecode/templates/admin/users/user_edit.html:134
 
#: rhodecode/templates/admin/users/user_edit.html:179
 
#: rhodecode/templates/admin/users/user_edit.html:282
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
 
#: rhodecode/templates/files/files_add.html:82
 
@@ -1956,78 +2056,103 @@ msgstr ""
 
msgid "Confirm to invalidate repository cache"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:195
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/base/base.html:322
 
msgid "Public journal"
 
#: rhodecode/templates/admin/repos/repo_edit.html:193
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository"
 
" will be cached again"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:198
 
msgid "List of cached values"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Remove from public journal"
 
msgid "Prefix"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:202
 
msgid "Key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:203
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:117
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:218
 
#: rhodecode/templates/base/base.html:331
 
#: rhodecode/templates/base/base.html:333
 
#: rhodecode/templates/base/base.html:335
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:224
 
msgid "Remove from public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:226
 
msgid "Add to public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:208
 
#: rhodecode/templates/admin/repos/repo_edit.html:231
 
msgid ""
 
"All actions made on this repository will be accessible to everyone in "
 
"public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:215
 
#: rhodecode/templates/admin/repos/repo_edit.html:238
 
msgid "Locking"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:220
 
#: rhodecode/templates/admin/repos/repo_edit.html:243
 
msgid "Unlock locked repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:220
 
#: rhodecode/templates/admin/repos/repo_edit.html:243
 
msgid "Confirm to unlock repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:246
 
msgid "lock repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:246
 
msgid "Confirm to lock repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:247
 
msgid "Repository is not locked"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:229
 
#: rhodecode/templates/admin/repos/repo_edit.html:252
 
msgid "Force locking on repository. Works only when anonymous access is disabled"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:245
 
msgid "Manually set this repository as a fork of another from the list"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:255
 
msgid "Remove this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:255
 
#: rhodecode/templates/journal/journal.html:84
 
msgid "Confirm to delete this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:259
 
msgid "Set as fork of"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:268
 
msgid "Manually set this repository as a fork of another from the list"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:274
 
#: rhodecode/templates/changeset/changeset_file_comment.html:26
 
msgid "Delete"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:278
 
msgid "Remove this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:278
 
msgid "Confirm to delete this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:282
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems.\n"
 
@@ -2053,7 +2178,7 @@ msgstr ""
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:85
 
#: rhodecode/templates/base/base.html:217
 
#: rhodecode/templates/base/base.html:229
 
msgid "admin"
 
msgstr ""
 

	
 
@@ -2064,8 +2189,8 @@ msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:67
 
#: rhodecode/templates/journal/journal.html:132
 
#: rhodecode/templates/summary/summary.html:76
 
#: rhodecode/templates/journal/journal.html:87
 
#: rhodecode/templates/summary/summary.html:85
 
msgid "private repository"
 
msgstr ""
 

	
 
@@ -2088,12 +2213,12 @@ msgid "Add another member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:97
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 
msgid "Failed to remove user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:112
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
 
msgid "Failed to remove users group"
 
msgstr ""
 

	
 
@@ -2101,11 +2226,44 @@ msgstr ""
 
msgid "Repositories administration"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
 
msgid "apply to children"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
 
msgid ""
 
"Set or revoke permission to all children of that group, including "
 
"repositories and other groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:9
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:313
 
#: rhodecode/templates/base/base.html:315
 
#: rhodecode/templates/base/base.html:317
 
#: rhodecode/templates/bookmarks/bookmarks.html:11
 
#: rhodecode/templates/branches/branches.html:10
 
#: rhodecode/templates/changelog/changelog.html:10
 
#: rhodecode/templates/changeset/changeset.html:10
 
#: rhodecode/templates/changeset/changeset_range.html:9
 
#: rhodecode/templates/compare/compare_diff.html:9
 
#: rhodecode/templates/files/file_diff.html:8
 
#: rhodecode/templates/files/files.html:8
 
#: rhodecode/templates/files/files_add.html:15
 
#: rhodecode/templates/files/files_edit.html:15
 
#: rhodecode/templates/followers/followers.html:9
 
#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
#: rhodecode/templates/settings/repo_settings.html:9
 
#: rhodecode/templates/shortlog/shortlog.html:10
 
#: rhodecode/templates/summary/summary.html:8
 
#: rhodecode/templates/tags/tags.html:11
 
msgid "Home"
 
msgstr ""
 

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

	
 
@@ -2131,7 +2289,7 @@ msgstr ""
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:131
 
msgid "save"
 
msgstr ""
 

	
 
@@ -2167,20 +2325,22 @@ msgstr ""
 
msgid "action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/user_edit.html:255
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
 
#: rhodecode/templates/admin/users/user_edit.html:259
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
#: rhodecode/templates/data_table/_dt_elements.html:7
 
#: rhodecode/templates/data_table/_dt_elements.html:103
 
#: rhodecode/templates/data_table/_dt_elements.html:121
 
msgid "delete"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "Confirm to delete this group: %s with %s repository"
 
msgid_plural "Confirm to delete this group: %s with %s repositories"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
 
msgid "There are no repositories groups yet"
 
msgstr ""
 

	
 
@@ -2273,8 +2433,8 @@ msgid "GA code"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:167
 
#: rhodecode/templates/admin/settings/settings.html:257
 
#: rhodecode/templates/admin/settings/settings.html:178
 
#: rhodecode/templates/admin/settings/settings.html:268
 
msgid "Save settings"
 
msgstr ""
 

	
 
@@ -2282,124 +2442,133 @@ msgstr ""
 
msgid "Visualisation settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:128
 
#: rhodecode/templates/admin/settings/settings.html:127
 
msgid "General"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:132
 
msgid "Use lightweight dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:139
 
msgid "Icons"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:133
 
msgid "Show public repo icon on repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:137
 
msgid "Show private repo icon on repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:144
 
msgid "Show public repo icon on repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:148
 
msgid "Show private repo icon on repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:155
 
msgid "Meta-Tagging"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:149
 
#: rhodecode/templates/admin/settings/settings.html:160
 
msgid "Stylify recognised metatags:"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:176
 
#: rhodecode/templates/admin/settings/settings.html:187
 
msgid "VCS settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:185
 
#: rhodecode/templates/admin/settings/settings.html:196
 
msgid "Web"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:190
 
#: rhodecode/templates/admin/settings/settings.html:201
 
msgid "require ssl for vcs operations"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:192
 
msgid ""
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 
"will return HTTP Error 406: Not Acceptable"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:198
 
msgid "Hooks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:203
 
msgid ""
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 
"will return HTTP Error 406: Not Acceptable"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:209
 
msgid "Hooks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:214
 
msgid "Update repository after push (hg update)"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
#: rhodecode/templates/admin/settings/settings.html:218
 
msgid "Show repository size after push"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:211
 
#: rhodecode/templates/admin/settings/settings.html:222
 
msgid "Log user push commands"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:215
 
#: rhodecode/templates/admin/settings/settings.html:226
 
msgid "Log user pull commands"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:219
 
#: rhodecode/templates/admin/settings/settings.html:230
 
msgid "advanced setup"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:224
 
msgid "Mercurial Extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:229
 
msgid "largefiles extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:233
 
msgid "hgsubversion extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:235
 
msgid "Mercurial Extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:240
 
msgid "largefiles extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:244
 
msgid "hgsubversion extensions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:246
 
msgid ""
 
"Requires hgsubversion library installed. Allows clonning from svn remote "
 
"locations"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:245
 
#: rhodecode/templates/admin/settings/settings.html:256
 
msgid "Repositories location"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:250
 
#: rhodecode/templates/admin/settings/settings.html:261
 
msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:251
 
#: rhodecode/templates/admin/settings/settings.html:262
 
#: rhodecode/templates/base/base.html:221
 
msgid "unlock"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:252
 
#: rhodecode/templates/admin/settings/settings.html:263
 
msgid ""
 
"Location where repositories are stored. After changing this value a "
 
"restart, and rescan is required"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:272
 
#: rhodecode/templates/admin/settings/settings.html:283
 
msgid "Test Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:280
 
#: rhodecode/templates/admin/settings/settings.html:291
 
msgid "Email to"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:288
 
#: rhodecode/templates/admin/settings/settings.html:299
 
msgid "Send"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:294
 
#: rhodecode/templates/admin/settings/settings.html:305
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:297
 
#: rhodecode/templates/admin/settings/settings.html:308
 
msgid "show"
 
msgstr ""
 

	
 
@@ -2420,13 +2589,6 @@ msgstr ""
 
msgid "Password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr ""
 
@@ -2446,26 +2608,26 @@ msgstr ""
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:63
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:72
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:81
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users/user_edit.html:151
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Inherit default permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:152
 
#: rhodecode/templates/admin/users/user_edit.html:156
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 
#, python-format
 
msgid ""
 
@@ -2473,46 +2635,48 @@ msgid ""
 
"options does not have any action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:158
 
#: rhodecode/templates/admin/users/user_edit.html:162
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 
msgid "Create repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:166
 
#: rhodecode/templates/admin/users/user_edit.html:170
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 
msgid "Fork repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:186
 
#: rhodecode/templates/admin/users/user_edit.html:190
 
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
 
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
 
msgid "Nothing here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:193
 
#: rhodecode/templates/admin/users/user_edit.html:197
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:60
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:194
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:217
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
 
msgid "Permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:194
 
#: rhodecode/templates/admin/users/user_edit.html:198
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
 
msgid "Edit Permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:243
 
#: rhodecode/templates/admin/users/user_edit.html:247
 
msgid "Email addresses"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:256
 
#: rhodecode/templates/admin/users/user_edit.html:260
 
#, python-format
 
msgid "Confirm to delete this email: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:270
 
#: rhodecode/templates/admin/users/user_edit.html:274
 
msgid "New email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:277
 
#: rhodecode/templates/admin/users/user_edit.html:281
 
msgid "Add"
 
msgstr ""
 

	
 
@@ -2568,31 +2732,33 @@ msgstr ""
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:55
 
#: rhodecode/templates/journal/journal.html:60
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/branches/branches.html:54
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/journal/journal_page_repos.html:8
 
#: rhodecode/templates/tags/tags.html:55
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
 
#: rhodecode/templates/journal/journal.html:81
 
#: rhodecode/templates/journal/journal_page_repos.html:29
 
msgid "private"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
 
#: rhodecode/templates/data_table/_dt_elements.html:7
 
#: rhodecode/templates/journal/journal_page_repos.html:32
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
 
#: rhodecode/templates/journal/journal.html:94
 
#: rhodecode/templates/journal/journal_page_repos.html:42
 
msgid "No repositories yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
 
#: rhodecode/templates/journal/journal.html:96
 
#: rhodecode/templates/journal/journal_page_repos.html:44
 
msgid "create one now"
 
msgstr ""
 

	
 
@@ -2601,7 +2767,7 @@ msgid "Users administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/base/base.html:223
 
#: rhodecode/templates/base/base.html:235
 
msgid "users"
 
msgstr ""
 

	
 
@@ -2631,7 +2797,7 @@ msgid "active"
 
msgstr ""
 

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

	
 
@@ -2680,6 +2846,18 @@ msgstr ""
 
msgid "Group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
 
msgid "No members yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
 
msgid "Permissions defined for this group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
 
msgid "No permissions set yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr ""
 
@@ -2722,36 +2900,10 @@ msgstr ""
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/base/base.html:304
 
#: rhodecode/templates/bookmarks/bookmarks.html:11
 
#: rhodecode/templates/branches/branches.html:10
 
#: rhodecode/templates/changelog/changelog.html:10
 
#: rhodecode/templates/changeset/changeset.html:10
 
#: rhodecode/templates/changeset/changeset_range.html:9
 
#: rhodecode/templates/compare/compare_diff.html:9
 
#: rhodecode/templates/files/file_diff.html:8
 
#: rhodecode/templates/files/files.html:8
 
#: rhodecode/templates/files/files_add.html:15
 
#: rhodecode/templates/files/files_edit.html:15
 
#: rhodecode/templates/followers/followers.html:9
 
#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
#: rhodecode/templates/settings/repo_settings.html:9
 
#: rhodecode/templates/shortlog/shortlog.html:10
 
#: rhodecode/templates/summary/summary.html:8
 
#: rhodecode/templates/tags/tags.html:11
 
msgid "Home"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
#: rhodecode/templates/base/base.html:313
 
#: rhodecode/templates/base/base.html:322
 
#: rhodecode/templates/base/base.html:324
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:21
 
#: rhodecode/templates/journal/public_journal.html:4
 
@@ -2771,7 +2923,7 @@ msgid "Products"
 
msgstr ""
 

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

	
 
@@ -2816,50 +2968,66 @@ msgstr ""
 

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

	
 
#: rhodecode/templates/base/base.html:209
 
msgid "repository settings"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/base/base.html:211
 
#: rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
 
#: rhodecode/templates/changelog/changelog.html:43
 
msgid "Open new pull request"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:213
 
#: rhodecode/templates/base/base.html:215
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:222
 
#: rhodecode/templates/base/base.html:223
 
msgid "lock"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:234
 
msgid "repositories groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:224
 
#: rhodecode/templates/base/base.html:236
 
msgid "users groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:225
 
#: rhodecode/templates/base/base.html:237
 
msgid "permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:238
 
#: rhodecode/templates/base/base.html:239
 
msgid "defaults"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:240
 
msgid "settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:251
 
#: rhodecode/templates/base/base.html:253
 
msgid "Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:246
 
#: rhodecode/templates/base/base.html:248
 
#: rhodecode/templates/base/base.html:259
 
#: rhodecode/templates/base/base.html:261
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:327
 
#: rhodecode/templates/base/base.html:329
 
#: rhodecode/templates/base/base.html:331
 
#: rhodecode/templates/base/base.html:340
 
#: rhodecode/templates/base/base.html:342
 
#: rhodecode/templates/base/base.html:344
 
#: rhodecode/templates/search/search.html:52
 
msgid "Search"
 
msgstr ""
 
@@ -2869,7 +3037,7 @@ msgid "add another comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:120
 
#: rhodecode/templates/journal/journal.html:75
 
#: rhodecode/templates/summary/summary.html:57
 
msgid "Stop following this repository"
 
msgstr ""
 
@@ -2883,14 +3051,26 @@ msgstr ""
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:47
 
#: rhodecode/templates/base/root.html:48
 
msgid "search truncated"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:48
 
#: rhodecode/templates/base/root.html:49
 
msgid "no matching files"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:51
 
msgid "Open new pull request for selected changesets"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:52
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:53
 
msgid "Selection link"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
#, python-format
 
msgid "%s Bookmarks"
 
@@ -2898,8 +3078,9 @@ msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:54
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/branches/branches.html:53
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/tags/tags.html:54
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr ""
 
@@ -2913,34 +3094,15 @@ msgstr ""
 
msgid "Compare branches"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches.html:57
 
#: rhodecode/templates/branches/branches.html:56
 
#: rhodecode/templates/branches/branches_data.html:10
 
#: rhodecode/templates/compare/compare_diff.html:5
 
#: rhodecode/templates/compare/compare_diff.html:13
 
#: rhodecode/templates/tags/tags.html:57
 
#: rhodecode/templates/tags/tags_data.html:10
 
msgid "Compare"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:10
 
msgid "compare"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:6
 
#, python-format
 
msgid "%s Changelog"
 
@@ -2954,57 +3116,63 @@ msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:37
 
msgid "Clear selection"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/templates/forks/forks_data.html:19
 
#, python-format
 
msgid "compare fork with %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:37
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:46
 
#: rhodecode/templates/changelog/changelog.html:40
 
msgid "Compare fork with parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:49
 
msgid "Show"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:72
 
#: rhodecode/templates/summary/summary.html:364
 
#: rhodecode/templates/changelog/changelog.html:74
 
#: rhodecode/templates/summary/summary.html:375
 
msgid "show more"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:76
 
#: rhodecode/templates/changelog/changelog.html:78
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:89
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changelog/changelog.html:91
 
#: rhodecode/templates/changeset/changeset.html:44
 
#: rhodecode/templates/changeset/changeset_file_comment.html:20
 
#: rhodecode/templates/changeset/changeset_range.html:46
 
msgid "Changeset status"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:92
 
#: rhodecode/templates/changelog/changelog.html:94
 
#: rhodecode/templates/shortlog/shortlog_data.html:20
 
msgid "Click to open associated pull request"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:102
 
#: rhodecode/templates/changeset/changeset.html:78
 
#: rhodecode/templates/changelog/changelog.html:104
 
#: rhodecode/templates/changeset/changeset.html:85
 
msgid "Parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:108
 
#: rhodecode/templates/changeset/changeset.html:84
 
#: rhodecode/templates/changelog/changelog.html:110
 
#: rhodecode/templates/changeset/changeset.html:91
 
msgid "No parents"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:113
 
#: rhodecode/templates/changeset/changeset.html:88
 
#: rhodecode/templates/changelog/changelog.html:115
 
#: rhodecode/templates/changeset/changeset.html:95
 
#: rhodecode/templates/changeset/changeset_range.html:79
 
msgid "merge"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:116
 
#: rhodecode/templates/changeset/changeset.html:91
 
#: rhodecode/templates/changelog/changelog.html:118
 
#: rhodecode/templates/changeset/changeset.html:98
 
#: rhodecode/templates/changeset/changeset_range.html:82
 
#: rhodecode/templates/files/files.html:29
 
#: rhodecode/templates/files/files_add.html:33
 
#: rhodecode/templates/files/files_edit.html:33
 
@@ -3012,44 +3180,42 @@ msgstr ""
 
msgid "branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:122
 
#: rhodecode/templates/changelog/changelog.html:124
 
#: rhodecode/templates/changeset/changeset_range.html:88
 
msgid "bookmark"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:128
 
#: rhodecode/templates/changeset/changeset.html:96
 
#: rhodecode/templates/changelog/changelog.html:130
 
#: rhodecode/templates/changeset/changeset.html:103
 
#: rhodecode/templates/changeset/changeset_range.html:94
 
msgid "tag"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:164
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:255
 
#: rhodecode/templates/changelog/changelog.html:301
 
msgid "There are no changes yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:66
 
#: rhodecode/templates/changeset/changeset.html:73
 
msgid "removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:5
 
#: rhodecode/templates/changeset/changeset.html:67
 
#: rhodecode/templates/changeset/changeset.html:74
 
msgid "changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changeset/changeset.html:68
 
#: rhodecode/templates/changeset/changeset.html:75
 
msgid "added"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changelog/changelog_details.html:9
 
#: rhodecode/templates/changelog/changelog_details.html:10
 
#: rhodecode/templates/changeset/changeset.html:70
 
#: rhodecode/templates/changeset/changeset.html:71
 
#: rhodecode/templates/changeset/changeset.html:72
 
#: rhodecode/templates/changeset/changeset.html:77
 
#: rhodecode/templates/changeset/changeset.html:78
 
#: rhodecode/templates/changeset/changeset.html:79
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 
@@ -3063,17 +3229,21 @@ msgstr ""
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:43
 
#: rhodecode/templates/changeset/changeset.html:49
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:44
 
#: rhodecode/templates/changeset/changeset.html:50
 
msgid "patch diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:51
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:48
 
#: rhodecode/templates/changeset/changeset.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:82
 
#, python-format
 
msgid "%d comment"
 
@@ -3081,7 +3251,7 @@ msgid_plural "%d comments"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:48
 
#: rhodecode/templates/changeset/changeset.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:82
 
#, python-format
 
msgid "(%d inline)"
 
@@ -3089,14 +3259,23 @@ msgid_plural "(%d inline)"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:103
 
#: rhodecode/templates/changeset/changeset.html:111
 
#: rhodecode/templates/compare/compare_diff.html:44
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:76
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:119
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 
msgid "%s file changed"
 
msgid_plural "%s files changed"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
#: rhodecode/templates/compare/compare_diff.html:46
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:78
 
#, python-format
 
msgid "%s file changed with %s insertions and %s deletions"
 
msgid_plural "%s files changed with %s insertions and %s deletions"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:42
 
msgid "Submitting..."
 
@@ -3161,14 +3340,16 @@ msgstr ""
 
msgid "Compare View"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Show combined compare"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:54
 
#: rhodecode/templates/compare/compare_diff.html:41
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:69
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgid "show full diff for this file"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
@@ -3180,7 +3361,16 @@ msgid "No changesets"
 
msgstr ""
 

	
 
#: rhodecode/templates/compare/compare_diff.html:37
 
msgid "Outgoing changesets"
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:69
 
#, python-format
 
msgid "Showing %s commit"
 
msgid_plural "Showing %s commits"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/compare/compare_diff.html:52
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:84
 
msgid "No files"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:39
 
@@ -3190,40 +3380,117 @@ msgid "Fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:60
 
#: rhodecode/templates/journal/journal.html:126
 
#: rhodecode/templates/summary/summary.html:68
 
#: rhodecode/templates/journal/journal.html:81
 
#: rhodecode/templates/summary/summary.html:77
 
msgid "Mercurial repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:62
 
#: rhodecode/templates/journal/journal.html:128
 
#: rhodecode/templates/summary/summary.html:71
 
#: rhodecode/templates/journal/journal.html:83
 
#: rhodecode/templates/summary/summary.html:80
 
msgid "Git repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:69
 
#: rhodecode/templates/journal/journal.html:134
 
#: rhodecode/templates/summary/summary.html:78
 
#: rhodecode/templates/journal/journal.html:89
 
#: rhodecode/templates/summary/summary.html:87
 
msgid "public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:80
 
#: rhodecode/templates/summary/summary.html:87
 
#: rhodecode/templates/summary/summary.html:88
 
#: rhodecode/templates/summary/summary.html:96
 
#: rhodecode/templates/summary/summary.html:97
 
msgid "Fork of"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:92
 
#: rhodecode/templates/data_table/_dt_elements.html:94
 
msgid "No changesets yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:104
 
#: rhodecode/templates/data_table/_dt_elements.html:101
 
#: rhodecode/templates/data_table/_dt_elements.html:103
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:109
 
#: rhodecode/templates/data_table/_dt_elements.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:122
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/changeset_comment.html:10
 
msgid "New status$"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is an notification from RhodeCode."
 
msgid "This is a notification from RhodeCode."
 
msgstr ""
 

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

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:11
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:18
 
msgid "View this pull request here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/errors/error_document.html:46
 
@@ -3241,13 +3508,13 @@ msgid "File diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:72
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:340
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr ""
 

	
 
@@ -3325,7 +3592,7 @@ msgid "search file list"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:65
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr ""
 

	
 
@@ -3358,18 +3625,18 @@ msgid "edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:38
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:40
 
#: rhodecode/templates/files/files_source.html:68
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:53
 
msgid "show as raw"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:41
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr ""
 

	
 
@@ -3381,43 +3648,47 @@ msgstr ""
 
msgid "Editing file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:2
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:9
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:10
 
#: rhodecode/templates/files/files_history_box.html:10
 
#, fuzzy
 
msgid "show at revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:14
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, fuzzy, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/files/files_source.html:36
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:59
 
#: rhodecode/templates/files/files_source.html:44
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:68
 
#: rhodecode/templates/files/files_source.html:53
 
msgid "File is too big to display"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:124
 
msgid "Selection link"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr ""
 
@@ -3489,7 +3760,7 @@ msgstr ""
 
msgid "forked"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:38
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr ""
 

	
 
@@ -3502,7 +3773,7 @@ msgid "RSS journal feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:24
 
#: rhodecode/templates/pullrequests/pullrequest.html:27
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr ""
 

	
 
@@ -3524,19 +3795,19 @@ msgstr ""
 
msgid "ADD"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:114
 
#: rhodecode/templates/journal/journal.html:69
 
msgid "following user"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:114
 
#: rhodecode/templates/journal/journal.html:69
 
msgid "user"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:147
 
#: rhodecode/templates/journal/journal.html:102
 
msgid "You are not following any users or repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal_data.html:47
 
#: rhodecode/templates/journal/journal_data.html:51
 
msgid "No entries yet"
 
msgstr ""
 

	
 
@@ -3557,7 +3828,7 @@ msgstr ""
 
msgid "New pull request"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:28
 
#: rhodecode/templates/pullrequests/pullrequest.html:54
 
msgid "refresh overview"
 
msgstr ""
 

	
 
@@ -3566,17 +3837,17 @@ msgid "Detailed compare view"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:70
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:82
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:100
 
msgid "Pull request reviewers"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:79
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:94
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:112
 
msgid "owner"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:91
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:109
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:127
 
msgid "Add reviewer to this pull request."
 
msgstr ""
 

	
 
@@ -3590,10 +3861,6 @@ msgstr ""
 
msgid "Title"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:123
 
msgid "Send pull request"
 
msgstr ""
 
@@ -3603,6 +3870,11 @@ msgstr ""
 
msgid "Closed %s"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:31
 
msgid "Status"
 
msgstr ""
 
@@ -3615,23 +3887,23 @@ msgstr ""
 
msgid "Still not reviewed by"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:47
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:48
 
#, python-format
 
msgid "%d reviewer"
 
msgid_plural "%d reviewers"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:54
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:50
 
msgid "pull request was reviewed by all reviewers"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:58
 
msgid "Created on"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:61
 
msgid "Compare view"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:65
 
msgid "Incoming changesets"
 
msgid "Compare view"
 
msgstr ""
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
 
@@ -3703,27 +3975,32 @@ msgstr ""
 
msgid "%s Shortlog"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:14
 
#: rhodecode/templates/shortlog/shortlog.html:15
 
#: rhodecode/templates/shortlog/shortlog.html:19
 
msgid "shortlog"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:7
 
msgid "age"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:18
 
msgid "No commit message"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:62
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:75
 
msgid "Add or upload files directly via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:71
 
#: rhodecode/templates/shortlog/shortlog_data.html:84
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:79
 
#: rhodecode/templates/shortlog/shortlog_data.html:92
 
msgid "Existing repository?"
 
msgstr ""
 

	
 
@@ -3751,128 +4028,137 @@ msgstr ""
 
msgid "ATOM"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:70
 
#, python-format
 
msgid "Repository locked by %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:72
 
msgid "Repository unlocked"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/summary/summary.html:87
 
#: rhodecode/templates/summary/summary.html:96
 
msgid "public"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:95
 
#: rhodecode/templates/summary/summary.html:104
 
msgid "remote clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:116
 
#: rhodecode/templates/summary/summary.html:125
 
msgid "Contact"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:130
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Clone url"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:133
 
msgid "Show by Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:134
 
msgid "Show by ID"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:142
 
msgid "Show by Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:143
 
msgid "Show by ID"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:151
 
msgid "Trending files"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:150
 
#: rhodecode/templates/summary/summary.html:166
 
#: rhodecode/templates/summary/summary.html:194
 
#: rhodecode/templates/summary/summary.html:159
 
#: rhodecode/templates/summary/summary.html:175
 
#: rhodecode/templates/summary/summary.html:203
 
msgid "enable"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:158
 
#: rhodecode/templates/summary/summary.html:167
 
msgid "Download"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:162
 
#: rhodecode/templates/summary/summary.html:171
 
msgid "There are no downloads yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "Downloads are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:170
 
msgid "Download as zip"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:173
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:173
 
msgid "Downloads are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:179
 
msgid "Download as zip"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:182
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:182
 
msgid "with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:186
 
#: rhodecode/templates/summary/summary.html:195
 
msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:197
 
#: rhodecode/templates/summary/summary.html:206
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:218
 
#: rhodecode/templates/summary/summary.html:227
 
msgid "Shortlog"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:220
 
#: rhodecode/templates/summary/summary.html:229
 
msgid "Quick start"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:233
 
#: rhodecode/templates/summary/summary.html:243
 
#, python-format
 
msgid "Readme file at revision '%s'"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:236
 
#: rhodecode/templates/summary/summary.html:246
 
msgid "Permalink to this readme"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:293
 
#: rhodecode/templates/summary/summary.html:304
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:650
 
#: rhodecode/templates/summary/summary.html:661
 
msgid "commits"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:651
 
#: rhodecode/templates/summary/summary.html:662
 
msgid "files added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:652
 
#: rhodecode/templates/summary/summary.html:663
 
msgid "files changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:653
 
#: rhodecode/templates/summary/summary.html:664
 
msgid "files removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:656
 
#: rhodecode/templates/summary/summary.html:667
 
msgid "commit"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:657
 
#: rhodecode/templates/summary/summary.html:668
 
msgid "file added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:658
 
#: rhodecode/templates/summary/summary.html:669
 
msgid "file changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:659
 
#: rhodecode/templates/summary/summary.html:670
 
msgid "file removed"
 
msgstr ""
 

	
 
@@ -3881,3 +4167,7 @@ msgstr ""
 
msgid "%s Tags"
 
msgstr ""
 

	
 
#: rhodecode/templates/tags/tags.html:29
 
msgid "Compare tags"
 
msgstr ""
 

	

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

0 comments (0 inline, 0 general)