Changeset - 91fae60bf2b6
.hgignore
Show inline comments
 
syntax: glob
 
*.pyc
 
*.swp
 
*.sqlite
 
Paste*.egg
 

	
 
syntax: regexp
 
^rcextensions
 
^build
 
^docs/build/
 
^docs/_build/
 
^data$
 
^\.settings$
 
^\.project$
 
^\.pydevproject$
 
^\.coverage$
 
^rhodecode\.db$
 
^test\.db$
 
^RhodeCode\.egg-info$
 
^rc\.ini$
 
^fabfile.py
 
^\.rhodecode$
docs/api/api.rst
Show inline comments
 
@@ -38,48 +38,89 @@ Example call for autopulling remotes rep
 

	
 
Simply provide
 
 - *id* A value of any type, which is used to match the response with the request that it is replying to.
 
 - *api_key* for access and permission validation.
 
 - *method* is name of method to call
 
 - *args* is an key:value list of arguments to pass to method
 

	
 
.. note::
 

	
 
    api_key can be found in your user account page
 

	
 

	
 
RhodeCode API will return always a JSON-RPC response::
 

	
 
    {   
 
        "id":<id>, # matching id sent by request
 
        "result": "<result>"|null, # JSON formatted result, null if any errors
 
        "error": "null"|<error_message> # JSON formatted error (if any)
 
    }
 

	
 
All responses from API will be `HTTP/1.0 200 OK`, if there's an error while
 
calling api *error* key from response will contain failure description
 
and result will be null.
 

	
 

	
 
API CLIENT
 
++++++++++
 

	
 
From version 1.4 RhodeCode adds a binary script that allows to easily
 
communicate with API. After installing RhodeCode a `rhodecode-api` script
 
will be available.
 

	
 
To get started quickly simply run::
 

	
 
  rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host>
 
 
 
This will create a file named .config in the directory you executed it storing
 
json config file with credentials. You can skip this step and always provide
 
both of the arguments to be able to communicate with server
 

	
 

	
 
after that simply run any api command for example get_repo::
 
 
 
 rhodecode-api get_repo
 

	
 
 calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000
 
 rhodecode said:
 
 {'error': 'Missing non optional `repoid` arg in JSON DATA',
 
  'id': 75,
 
  'result': None}
 

	
 
Ups looks like we forgot to add an argument
 

	
 
Let's try again now giving the repoid as parameters::
 

	
 
    rhodecode-api get_repo repoid:rhodecode   
 
 
 
    calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000
 
    rhodecode said:
 
    {'error': None,
 
     'id': 39,
 
     'result': <json data...>}
 

	
 

	
 

	
 
API METHODS
 
+++++++++++
 

	
 

	
 
pull
 
----
 

	
 
Pulls given repo from remote location. Can be used to automatically keep
 
remote repos up to date. This command can be executed only using api_key
 
belonging to user with admin rights
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "pull"
 
    args :    {
 
                "repo_name" : "<reponame>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result : "Pulled from <reponame>"
 
    error :  null
 
@@ -166,82 +207,119 @@ create_user
 
Creates new user. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_user"
 
    args :    {
 
                "username" :  "<username>",
 
                "password" :  "<password>",
 
                "email" :     "<useremail>",
 
                "firstname" : "<firstname> = None",
 
                "lastname" :  "<lastname> = None",
 
                "active" :    "<bool> = True",
 
                "admin" :     "<bool> = False",
 
                "ldap_dn" :   "<ldap_dn> = None"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<new_user_id>",
 
              "msg" : "created new user <username>"
 
              "msg" : "created new user <username>",
 
              "user": {
 
                "id" :       "<id>",
 
                "username" : "<username>",
 
                "firstname": "<firstname>",
 
                "lastname" : "<lastname>",
 
                "email" :    "<email>",
 
                "active" :   "<bool>",
 
                "admin" :    "<bool>",
 
                "ldap_dn" :  "<ldap_dn>",
 
                "last_login": "<last_login>",
 
              },
 
            }
 
    error:  null
 

	
 

	
 
update_user
 
-----------
 

	
 
updates current one if such user exists. This command can 
 
updates given user if such user exists. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "update_user"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
                "username" :  "<username>",
 
                "password" :  "<password>",
 
                "email" :     "<useremail>",
 
                "firstname" : "<firstname>",
 
                "lastname" :  "<lastname>",
 
                "active" :    "<bool>",
 
                "admin" :     "<bool>",
 
                "ldap_dn" :   "<ldap_dn>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<edited_user_id>",
 
              "msg" : "updated user <username>"
 
              "msg" : "updated user ID:<userid> <username>"
 
            }
 
    error:  null
 

	
 

	
 
delete_user
 
-----------
 

	
 

	
 
deletes givenuser if such user exists. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "delete_user"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<edited_user_id>",
 
              "msg" : "deleted user ID:<userid> <username>"
 
            }
 
    error:  null
 

	
 

	
 
get_users_group
 
---------------
 

	
 
Gets an existing users group. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_users_group"
 
    args :    {
 
                "group_name" : "<name>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result : None if group not exist
 
             {
 
@@ -513,48 +591,57 @@ belonging to user with admin rights.
 
If repository name contains "/", all needed repository groups will be created.
 
For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
 
and create "baz" repository with "bar" as group.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
                "owner_name" :  "<ownername>",
 
                "description" : "<description> = ''",
 
                "repo_type" :   "<type> = 'hg'",
 
                "private" :     "<bool> = False",
 
                "clone_uri" :   "<clone_uri> = None",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id": "<newrepoid>",
 
              "msg": "Created new repository <reponame>",
 
              "repo": {
 
                "id" :          "<id>",
 
                "repo_name" :   "<reponame>"
 
                "type" :        "<type>",
 
                "description" : "<description>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",
 
              },
 
            }
 
    error:  null
 

	
 

	
 
delete_repo
 
-----------
 

	
 
Deletes a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "delete_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg": "Deleted repository <reponame>",
docs/changelog.rst
Show inline comments
 
.. _changelog:
 

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

	
 
1.4.0 (**2012-XX-XX**)
 
----------------------
 

	
 
:status: in-progress
 
:branch: beta
 

	
 
news
 
++++
 
 
 
- new codereview system
 
- email map, allowing users to have multiple email addresses mapped into
 
  their accounts
 
- changed setup-app into setup-rhodecode and added default options to it.
 
- new git repos are created as bare now by default
 
- #464 added links to groups in permission box
 
- #465 mentions autocomplete inside comments boxes
 
- #469 added --update-only option to whoosh to re-index only given list
 
  of repos in index 
 
- rhodecode-api CLI client
 
- new git http protocol replaced buggy dulwich implementation.
 
  Now based on pygrack & gitweb
 

	
 
fixes
 
+++++
 

	
 
- improved translations
 
- fixes issue #455 Creating an archive generates an exception on Windows
 
- fixes #448 Download ZIP archive keeps file in /tmp open and results 
 
  in out of disk space
 
- fixes issue #454 Search results under Windows include proceeding
 
  backslash
 
- fixed issue #450. Rhodecode no longer will crash when bad revision is
 
  present in journal data.
 
- fix for issue #417, git execution was broken on windows for certain
 
  commands.
 
- fixed #413. Don't disable .git directory for bare repos on deleting
 
- fixed issue #459. Changed the way of obtaining logger in reindex task.
 

	
 
1.3.6 (**2012-05-17**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- chinese traditional translation
requires.txt
Show inline comments
 
Pylons==1.0.0
 
Beaker==1.6.3
 
WebHelpers==1.3
 
formencode==1.2.4
 
SQLAlchemy==0.7.6
 
Mako==0.7.0
 
pygments>=1.4
 
whoosh>=2.4.0,<2.5
 
celery>=2.2.5,<2.3
 
babel
 
python-dateutil>=1.5.0,<2.0.0
 
dulwich>=0.8.5,<0.9.0
 
webob==1.0.8
 
markdown==2.1.1
 
docutils==0.8.1
 
simplejson==2.5.2
 
py-bcrypt
 
mercurial>=2.2.1,<2.3
 
\ No newline at end of file
 
mercurial>=2.2.2,<2.3
 
\ No newline at end of file
rhodecode/__init__.py
Show inline comments
 
@@ -51,48 +51,48 @@ is_unix = __platform__ in PLATFORM_OTHER
 

	
 
requirements = [
 
    "Pylons==1.0.0",
 
    "Beaker==1.6.3",
 
    "WebHelpers==1.3",
 
    "formencode==1.2.4",
 
    "SQLAlchemy==0.7.6",
 
    "Mako==0.7.0",
 
    "pygments>=1.4",
 
    "whoosh>=2.4.0,<2.5",
 
    "celery>=2.2.5,<2.3",
 
    "babel",
 
    "python-dateutil>=1.5.0,<2.0.0",
 
    "dulwich>=0.8.5,<0.9.0",
 
    "webob==1.0.8",
 
    "markdown==2.1.1",
 
    "docutils==0.8.1",
 
    "simplejson==2.5.2",
 
]
 

	
 
if __py_version__ < (2, 6):
 
    requirements.append("pysqlite")
 

	
 
if is_windows:
 
    requirements.append("mercurial>=2.2.1,<2.3")
 
    requirements.append("mercurial>=2.2.2,<2.3")
 
else:
 
    requirements.append("py-bcrypt")
 
    requirements.append("mercurial>=2.2.1,<2.3")
 
    requirements.append("mercurial>=2.2.2,<2.3")
 

	
 

	
 
def get_version():
 
    """Returns shorter version (digit parts only) as string."""
 

	
 
    return '.'.join((str(each) for each in VERSION[:3]))
 

	
 
BACKENDS = {
 
    'hg': 'Mercurial repository',
 
    'git': 'Git repository',
 
}
 

	
 
CELERY_ON = False
 
CELERY_EAGER = False
 

	
 
# link to config for pylons
 
CONFIG = {}
 

	
 
# Linked module for extensions
 
EXTENSIONS = {}
rhodecode/bin/__init__.py
Show inline comments
 
new file 100644
rhodecode/bin/rhodecode_api.py
Show inline comments
 
new file 100755
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.bin.backup_manager
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Api CLI client for RhodeCode
 

	
 
    :created_on: Jun 3, 2012
 
    :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/>.
 

	
 
from __future__ import with_statement
 
import os
 
import sys
 
import random
 
import urllib2
 
import pprint
 
import argparse
 

	
 
try:
 
    from rhodecode.lib.ext_json import json
 
except ImportError:
 
    try:
 
        import simplejson as json
 
    except ImportError:
 
        import json
 

	
 

	
 
CONFIG_NAME = '.rhodecode'
 
FORMAT_PRETTY = 'pretty'
 
FORMAT_JSON = 'json'
 

	
 

	
 
class RcConf(object):
 
    """
 
    RhodeCode config for API
 

	
 
    conf = RcConf()
 
    conf['key']
 

	
 
    """
 

	
 
    def __init__(self, autoload=True, autocreate=False, config=None):
 
        self._conf_name = CONFIG_NAME
 
        self._conf = {}
 
        if autocreate:
 
            self.make_config(config)
 
        if autoload:
 
            self._conf = self.load_config()
 

	
 
    def __getitem__(self, key):
 
        return self._conf[key]
 

	
 
    def __nonzero__(self):
 
        if self._conf:
 
            return True
 
        return False
 

	
 
    def __eq__(self):
 
        return self._conf.__eq__()
 

	
 
    def __repr__(self):
 
        return 'RcConf<%s>' % self._conf.__repr__()
 

	
 
    def make_config(self, config):
 
        """
 
        Saves given config as a JSON dump in the _conf_name location
 

	
 
        :param config:
 
        :type config:
 
        """
 
        with open(self._conf_name, 'wb') as f:
 
            json.dump(config, f, indent=4)
 
            sys.stdout.write('Updated conf\n')
 

	
 
    def update_config(self, new_config):
 
        """
 
        Reads the JSON config updates it's values with new_config and
 
        saves it back as JSON dump
 

	
 
        :param new_config:
 
        """
 
        config = {}
 
        try:
 
            with open(self._conf_name, 'rb') as conf:
 
                config = json.load(conf)
 
        except IOError, e:
 
            sys.stderr.write(str(e) + '\n')
 

	
 
        config.update(new_config)
 
        self.make_config(config)
 

	
 
    def load_config(self):
 
        """
 
        Loads config from file and returns loaded JSON object
 
        """
 
        try:
 
            with open(self._conf_name, 'rb') as conf:
 
                return  json.load(conf)
 
        except IOError, e:
 
            #sys.stderr.write(str(e) + '\n')
 
            pass
 

	
 

	
 
def api_call(apikey, apihost, format, method=None, **kw):
 
    """
 
    Api_call wrapper for RhodeCode
 

	
 
    :param apikey:
 
    :param apihost:
 
    :param format: formatting, pretty means prints and pprint of json
 
     json returns unparsed json
 
    :param method:
 
    """
 
    def _build_data(random_id):
 
        """
 
        Builds API data with given random ID
 

	
 
        :param random_id:
 
        :type random_id:
 
        """
 
        return {
 
            "id": random_id,
 
            "api_key": apikey,
 
            "method": method,
 
            "args": kw
 
        }
 

	
 
    if not method:
 
        raise Exception('please specify method name !')
 
    id_ = random.randrange(1, 200)
 
    req = urllib2.Request('%s/_admin/api' % apihost,
 
                      data=json.dumps(_build_data(id_)),
 
                      headers={'content-type': 'text/plain'})
 
    if format == FORMAT_PRETTY:
 
        sys.stdout.write('calling %s to %s \n' % (req.get_data(), apihost))
 
    ret = urllib2.urlopen(req)
 
    raw_json = ret.read()
 
    json_data = json.loads(raw_json)
 
    id_ret = json_data['id']
 
    _formatted_json = pprint.pformat(json_data)
 
    if id_ret == id_:
 
        if format == FORMAT_JSON:
 
            sys.stdout.write(str(raw_json))
 
        else:
 
            sys.stdout.write('rhodecode returned:\n%s\n' % (_formatted_json))
 

	
 
    else:
 
        raise Exception('something went wrong. '
 
                        'ID mismatch got %s, expected %s | %s' % (
 
                                            id_ret, id_, _formatted_json))
 

	
 

	
 
def argparser(argv):
 
    usage = ("rhodecode_api [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] "
 
             "_create_config or METHOD <key:val> <key2:val> ...")
 

	
 
    parser = argparse.ArgumentParser(description='RhodeCode API cli',
 
                                     usage=usage)
 

	
 
    ## config
 
    group = parser.add_argument_group('config')
 
    group.add_argument('--apikey', help='api access key')
 
    group.add_argument('--apihost', help='api host')
 

	
 
    group = parser.add_argument_group('API')
 
    group.add_argument('method', metavar='METHOD', type=str,
 
            help='API method name to call followed by key:value attributes',
 
    )
 
    group.add_argument('--format', dest='format', type=str,
 
            help='output format default: `pretty` can '
 
                 'be also `%s`' % FORMAT_JSON,
 
            default=FORMAT_PRETTY
 
    )
 
    args, other = parser.parse_known_args()
 
    return parser, args, other
 

	
 

	
 
def main(argv=None):
 
    """
 
    Main execution function for cli
 

	
 
    :param argv:
 
    :type argv:
 
    """
 
    if argv is None:
 
        argv = sys.argv
 

	
 
    conf = None
 
    parser, args, other = argparser(argv)
 

	
 
    api_credentials_given = (args.apikey and args.apihost)
 
    if args.method == '_create_config':
 
        if not api_credentials_given:
 
            raise parser.error('_create_config requires --apikey and --apihost')
 
        conf = RcConf(autocreate=True, config={'apikey': args.apikey,
 
                                               'apihost': args.apihost})
 
        sys.stdout.write('Create new config in %s\n' % CONFIG_NAME)
 

	
 
    if not conf:
 
        conf = RcConf(autoload=True)
 
        if not conf:
 
            if not api_credentials_given:
 
                parser.error('Could not find config file and missing '
 
                             '--apikey or --apihost in params')
 

	
 
    apikey = args.apikey or conf['apikey']
 
    host = args.apihost or conf['apihost']
 
    method = args.method
 
    margs = dict(map(lambda s: s.split(':', 1), other))
 

	
 
    api_call(apikey, host, args.format, method, **margs)
 
    return 0
 

	
 
if __name__ == '__main__':
 
    sys.exit(main(sys.argv))
rhodecode/bin/rhodecode_backup.py
Show inline comments
 
modified file chmod 100644 => 100755
 
file renamed from rhodecode/lib/backup_manager.py to rhodecode/bin/rhodecode_backup.py
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.backup_manager
 
    rhodecode.bin.backup_manager
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Mercurial repositories backup manager, it allows to backups all
 
    Repositories backup manager, it allows to backups all
 
    repositories and send it to backup server using RSA key via ssh.
 

	
 
    :created_on: Feb 28, 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 os
 
import sys
 

	
 
import logging
 
import tarfile
 
import datetime
 
import subprocess
 

	
 
logging.basicConfig(level=logging.DEBUG,
 
                    format="%(asctime)s %(levelname)-5.5s %(message)s")
 

	
 

	
 
class BackupManager(object):
 
    def __init__(self, repos_location, rsa_key, backup_server):
 
        today = datetime.datetime.now().weekday() + 1
 
        self.backup_file_name = "mercurial_repos.%s.tar.gz" % today
 
        self.backup_file_name = "rhodecode_repos.%s.tar.gz" % today
 

	
 
        self.id_rsa_path = self.get_id_rsa(rsa_key)
 
        self.repos_path = self.get_repos_path(repos_location)
 
        self.backup_server = backup_server
 

	
 
        self.backup_file_path = '/tmp'
 

	
 
        logging.info('starting backup for %s', self.repos_path)
 
        logging.info('backup target %s', self.backup_file_path)
 

	
 
    def get_id_rsa(self, rsa_key):
 
        if not os.path.isfile(rsa_key):
 
            logging.error('Could not load id_rsa key file in %s', rsa_key)
 
            sys.exit()
 
        return rsa_key
 

	
 
    def get_repos_path(self, path):
 
        if not os.path.isdir(path):
 
            logging.error('Wrong location for repositories in %s', path)
 
            sys.exit()
 
        return path
 

	
 
    def backup_repos(self):
 
        bckp_file = os.path.join(self.backup_file_path, self.backup_file_name)
rhodecode/config/routing.py
Show inline comments
 
@@ -196,49 +196,49 @@ def make_map(config):
 
        m.connect("formatted_new_user", "/users/new.{format}",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("update_user", "/users/{id}",
 
                  action="update", conditions=dict(method=["PUT"]))
 
        m.connect("delete_user", "/users/{id}",
 
                  action="delete", conditions=dict(method=["DELETE"]))
 
        m.connect("edit_user", "/users/{id}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("formatted_edit_user",
 
                  "/users/{id}.{format}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("user", "/users/{id}",
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_user", "/users/{id}.{format}",
 
                  action="show", conditions=dict(method=["GET"]))
 

	
 
        #EXTRAS USER ROUTES
 
        m.connect("user_perm", "/users_perm/{id}",
 
                  action="update_perm", conditions=dict(method=["PUT"]))
 
        m.connect("user_emails", "/users_emails/{id}",
 
                  action="add_email", conditions=dict(method=["PUT"]))
 
        m.connect("user_emails_delete", "/users_emails/{id}",
 
                  action="delete_email", conditions=dict(method=["DELETE"]))
 

	
 
    #ADMIN USERS REST ROUTES
 
    #ADMIN USERS GROUPS REST ROUTES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/users_groups') as m:
 
        m.connect("users_groups", "/users_groups",
 
                  action="create", conditions=dict(method=["POST"]))
 
        m.connect("users_groups", "/users_groups",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("formatted_users_groups", "/users_groups.{format}",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("new_users_group", "/users_groups/new",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("formatted_new_users_group", "/users_groups/new.{format}",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("update_users_group", "/users_groups/{id}",
 
                  action="update", conditions=dict(method=["PUT"]))
 
        m.connect("delete_users_group", "/users_groups/{id}",
 
                  action="delete", conditions=dict(method=["DELETE"]))
 
        m.connect("edit_users_group", "/users_groups/{id}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("formatted_edit_users_group",
 
                  "/users_groups/{id}.{format}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("users_group", "/users_groups/{id}",
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_users_group", "/users_groups/{id}.{format}",
 
@@ -325,52 +325,59 @@ def make_map(config):
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_notification", "/notifications/{notification_id}.{format}",
 
                  action="show", conditions=dict(method=["GET"]))
 

	
 
    #ADMIN MAIN PAGES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/admin') as m:
 
        m.connect('admin_home', '', action='index')
 
        m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
 
                  action='add_repo')
 

	
 
    #==========================================================================
 
    # API V2
 
    #==========================================================================
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='api/api') as m:
 
        m.connect('api', '/api')
 

	
 
    #USER JOURNAL
 
    rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal')
 

	
 
    rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal")
 

	
 
    rmap.connect('public_journal_rss', '%s/public_journal_rss' % ADMIN_PREFIX,
 
    rmap.connect('public_journal_rss', '%s/public_journal/rss' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal_rss")
 

	
 
    rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal_rss")
 

	
 
    rmap.connect('public_journal_atom',
 
                 '%s/public_journal/atom' % ADMIN_PREFIX, controller='journal',
 
                 action="public_journal_atom")
 

	
 
    rmap.connect('public_journal_atom_old',
 
                 '%s/public_journal_atom' % ADMIN_PREFIX, controller='journal',
 
                 action="public_journal_atom")
 

	
 
    rmap.connect('toggle_following', '%s/toggle_following' % ADMIN_PREFIX,
 
                 controller='journal', action='toggle_following',
 
                 conditions=dict(method=["POST"]))
 

	
 
    #SEARCH
 
    rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',)
 
    rmap.connect('search_repo', '%s/search/{search_repo:.*}' % ADMIN_PREFIX,
 
                  controller='search')
 

	
 
    #LOGIN/LOGOUT/REGISTER/SIGN IN
 
    rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login')
 
    rmap.connect('logout_home', '%s/logout' % ADMIN_PREFIX, controller='login',
 
                 action='logout')
 

	
 
    rmap.connect('register', '%s/register' % ADMIN_PREFIX, controller='login',
 
                 action='register')
 

	
 
    rmap.connect('reset_password', '%s/password_reset' % ADMIN_PREFIX,
 
                 controller='login', action='password_reset')
 

	
 
    rmap.connect('reset_password_confirmation',
rhodecode/controllers/admin/repos.py
Show inline comments
 
@@ -130,52 +130,54 @@ class ReposController(BaseController):
 

	
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
 
    def create(self):
 
        """
 
        POST /repos: Create a new item"""
 
        # url('repos')
 

	
 
        self.__load_defaults()
 
        form_result = {}
 
        try:
 
            form_result = RepoForm(repo_groups=c.repo_groups_choices)()\
 
                            .to_python(dict(request.POST))
 
            RepoModel().create(form_result, self.rhodecode_user)
 
            if form_result['clone_uri']:
 
                h.flash(_('created repository %s from %s') \
 
                    % (form_result['repo_name'], form_result['clone_uri']),
 
                    category='success')
 
            else:
 
                h.flash(_('created repository %s') % form_result['repo_name'],
 
                    category='success')
 

	
 
            if request.POST.get('user_created'):
 
                # created by regular non admin user
 
                action_logger(self.rhodecode_user, 'user_created_repo',
 
                              form_result['repo_name_full'], '', self.sa)
 
                              form_result['repo_name_full'], self.ip_addr,
 
                              self.sa)
 
            else:
 
                action_logger(self.rhodecode_user, 'admin_created_repo',
 
                              form_result['repo_name_full'], '', self.sa)
 
                              form_result['repo_name_full'], self.ip_addr,
 
                              self.sa)
 
            Session.commit()
 
        except formencode.Invalid, errors:
 

	
 
            c.new_repo = errors.value['repo_name']
 

	
 
            if request.POST.get('user_created'):
 
                r = render('admin/repos/repo_add_create_repository.html')
 
            else:
 
                r = render('admin/repos/repo_add.html')
 

	
 
            return htmlfill.render(
 
                r,
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            msg = _('error occurred during creation of repository %s') \
 
                    % form_result.get('repo_name')
 
            h.flash(msg, category='error')
 
        if request.POST.get('user_created'):
 
            return redirect(url('home'))
 
@@ -191,90 +193,90 @@ class ReposController(BaseController):
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def update(self, repo_name):
 
        """
 
        PUT /repos/repo_name: 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('repo', repo_name=ID),
 
        #           method='put')
 
        # url('repo', repo_name=ID)
 
        self.__load_defaults()
 
        repo_model = RepoModel()
 
        changed_name = repo_name
 
        _form = RepoForm(edit=True, old_data={'repo_name': repo_name},
 
                         repo_groups=c.repo_groups_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            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')
 
            changed_name = repo.repo_name
 
            action_logger(self.rhodecode_user, 'admin_updated_repo',
 
                              changed_name, '', self.sa)
 
                              changed_name, self.ip_addr, self.sa)
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            defaults = self.__load_data(repo_name)
 
            defaults.update(errors.value)
 
            return htmlfill.render(
 
                render('admin/repos/repo_edit.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 repository %s') \
 
                    % repo_name, category='error')
 
        return redirect(url('edit_repo', repo_name=changed_name))
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def delete(self, repo_name):
 
        """
 
        DELETE /repos/repo_name: 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('repo', repo_name=ID),
 
        #           method='delete')
 
        # url('repo', repo_name=ID)
 

	
 
        repo_model = RepoModel()
 
        repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was moved or renamed  from the filesystem'
 
                      ' please run the application again'
 
                      ' in order to rescan repositories') % repo_name,
 
                      category='error')
 

	
 
            return redirect(url('repos'))
 
        try:
 
            action_logger(self.rhodecode_user, 'admin_deleted_repo',
 
                              repo_name, '', self.sa)
 
                              repo_name, self.ip_addr, self.sa)
 
            repo_model.delete(repo)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('deleted repository %s') % repo_name, category='success')
 
            Session.commit()
 
        except IntegrityError, e:
 
            if e.message.find('repositories_fork_id_fkey') != -1:
 
                log.error(traceback.format_exc())
 
                h.flash(_('Cannot delete %s it still contains attached '
 
                          'forks') % repo_name,
 
                        category='warning')
 
            else:
 
                log.error(traceback.format_exc())
 
                h.flash(_('An error occurred during '
 
                          'deletion of %s') % repo_name,
 
                        category='error')
 

	
 
        except Exception, e:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of %s') % repo_name,
 
                    category='error')
 

	
 
        return redirect(url('repos'))
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
rhodecode/controllers/admin/users.py
Show inline comments
 
@@ -21,121 +21,127 @@
 
# 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, config
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.exceptions import DefaultUserException, \
 
    UserOwnsReposException
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 

	
 
from rhodecode.model.db import User, Permission, UserEmailMap
 
from rhodecode.model.forms import UserForm
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils import action_logger
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class UsersController(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('user', 'users')
 

	
 
    @LoginRequired()
 
    @HasPermissionAllDecorator('hg.admin')
 
    def __before__(self):
 
        c.admin_user = session.get('admin_user')
 
        c.admin_username = session.get('admin_username')
 
        super(UsersController, self).__before__()
 
        c.available_permissions = config['available_permissions']
 

	
 
    def index(self, format='html'):
 
        """GET /users: All items in the collection"""
 
        # url('users')
 

	
 
        c.users_list = self.sa.query(User).all()
 
        return render('admin/users/users.html')
 

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

	
 
        user_model = UserModel()
 
        user_form = UserForm()()
 
        try:
 
            form_result = user_form.to_python(dict(request.POST))
 
            user_model.create(form_result)
 
            h.flash(_('created user %s') % form_result['username'],
 
            usr = form_result['username']
 
            action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('created user %s') % usr,
 
                    category='success')
 
            Session.commit()
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
        except formencode.Invalid, errors:
 
            return htmlfill.render(
 
                render('admin/users/user_add.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 creation of user %s') \
 
                    % request.POST.get('username'), category='error')
 
        return redirect(url('users'))
 

	
 
    def new(self, format='html'):
 
        """GET /users/new: Form to create a new item"""
 
        # url('new_user')
 
        return render('admin/users/user_add.html')
 

	
 
    def update(self, id):
 
        """PUT /users/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('update_user', id=ID),
 
        #           method='put')
 
        # url('user', id=ID)
 
        user_model = UserModel()
 
        c.user = user_model.get(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)
 
            usr = form_result['username']
 
            action_logger(self.rhodecode_user, 'admin_updated_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('User updated successfully'), category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            e = errors.error_dict or {}
 
            perm = Permission.get_by_key('hg.create.repository')
 
            e.update({'create_repo_perm': user_model.has_perm(id, perm)})
 
            return htmlfill.render(
 
                render('admin/users/user_edit.html'),
 
                defaults=errors.value,
 
                errors=e,
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of user %s') \
 
                    % form_result.get('username'), category='error')
 

	
 
        return redirect(url('users'))
 

	
 
    def delete(self, id):
 
        """DELETE /users/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:
rhodecode/controllers/admin/users_groups.py
Show inline comments
 
@@ -22,134 +22,138 @@
 
#
 
# 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, config
 
from pylons.controllers.util import abort, redirect
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.exceptions import UsersGroupsAssignedException
 
from rhodecode.lib.utils2 import safe_unicode
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 

	
 
from rhodecode.model.users_group import UsersGroupModel
 

	
 
from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm
 
from rhodecode.model.forms import UsersGroupForm
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils import action_logger
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class UsersGroupsController(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('users_group', 'users_groups')
 

	
 
    @LoginRequired()
 
    @HasPermissionAllDecorator('hg.admin')
 
    def __before__(self):
 
        c.admin_user = session.get('admin_user')
 
        c.admin_username = session.get('admin_username')
 
        super(UsersGroupsController, self).__before__()
 
        c.available_permissions = config['available_permissions']
 

	
 
    def index(self, format='html'):
 
        """GET /users_groups: All items in the collection"""
 
        # url('users_groups')
 
        c.users_groups_list = self.sa.query(UsersGroup).all()
 
        return render('admin/users_groups/users_groups.html')
 

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

	
 
        users_group_form = UsersGroupForm()()
 
        try:
 
            form_result = users_group_form.to_python(dict(request.POST))
 
            UsersGroupModel().create(name=form_result['users_group_name'],
 
                                     active=form_result['users_group_active'])
 
            h.flash(_('created users group %s') \
 
                    % form_result['users_group_name'], category='success')
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
            gr = form_result['users_group_name']
 
            action_logger(self.rhodecode_user,
 
                          'admin_created_users_group:%s' % gr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('created users group %s') % gr, category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            return htmlfill.render(
 
                render('admin/users_groups/users_group_add.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 creation of users group %s') \
 
                    % request.POST.get('users_group_name'), category='error')
 

	
 
        return redirect(url('users_groups'))
 

	
 
    def new(self, format='html'):
 
        """GET /users_groups/new: Form to create a new item"""
 
        # url('new_users_group')
 
        return render('admin/users_groups/users_group_add.html')
 

	
 
    def update(self, id):
 
        """PUT /users_groups/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('users_group', id=ID),
 
        #           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
 
                               self.sa.query(User).all()]
 

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

	
 
        users_group_form = UsersGroupForm(edit=True,
 
                                          old_data=c.users_group.get_dict(),
 
                                          available_members=available_members)()
 

	
 
        try:
 
            form_result = users_group_form.to_python(request.POST)
 
            UsersGroupModel().update(c.users_group, form_result)
 
            h.flash(_('updated users group %s') \
 
                        % form_result['users_group_name'],
 
                    category='success')
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
            gr = form_result['users_group_name']
 
            action_logger(self.rhodecode_user,
 
                          'admin_updated_users_group:%s' % gr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('updated users group %s') % gr, category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            e = errors.error_dict or {}
 

	
 
            perm = Permission.get_by_key('hg.create.repository')
 
            e.update({'create_repo_perm':
 
                         UsersGroupModel().has_perm(id, perm)})
 

	
 
            return htmlfill.render(
 
                render('admin/users_groups/users_group_edit.html'),
 
                defaults=errors.value,
 
                errors=e,
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of users group %s') \
 
                    % request.POST.get('users_group_name'), category='error')
 

	
 
        return redirect(url('users_groups'))
 

	
 
    def delete(self, id):
 
        """DELETE /users_groups/id: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
rhodecode/controllers/api/__init__.py
Show inline comments
 
@@ -36,170 +36,183 @@ from rhodecode.lib.compat import izip_lo
 
from paste.response import replace_header
 

	
 
from pylons.controllers import WSGIController
 

	
 

	
 
from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
 
HTTPBadRequest, HTTPError
 

	
 
from rhodecode.model.db import User
 
from rhodecode.lib.auth import AuthUser
 

	
 
log = logging.getLogger('JSONRPC')
 

	
 

	
 
class JSONRPCError(BaseException):
 

	
 
    def __init__(self, message):
 
        self.message = message
 
        super(JSONRPCError, self).__init__()
 

	
 
    def __str__(self):
 
        return str(self.message)
 

	
 

	
 
def jsonrpc_error(message, code=None):
 
def jsonrpc_error(message, retid=None, code=None):
 
    """
 
    Generate a Response object with a JSON-RPC error body
 
    """
 
    from pylons.controllers.util import Response
 
    resp = Response(body=json.dumps(dict(id=None, result=None, error=message)),
 
    return Response(
 
            body=json.dumps(dict(id=retid, result=None, error=message)),
 
                    status=code,
 
                    content_type='application/json')
 
    return resp
 
            content_type='application/json'
 
    )
 

	
 

	
 
class JSONRPCController(WSGIController):
 
    """
 
     A WSGI-speaking JSON-RPC controller class
 

	
 
     See the specification:
 
     <http://json-rpc.org/wiki/specification>`.
 

	
 
     Valid controller return values should be json-serializable objects.
 

	
 
     Sub-classes should catch their exceptions and raise JSONRPCError
 
     if they want to pass meaningful errors to the client.
 

	
 
     """
 

	
 
    def _get_method_args(self):
 
        """
 
        Return `self._rpc_args` to dispatched controller method
 
        chosen by __call__
 
        """
 
        return self._rpc_args
 

	
 
    def __call__(self, environ, start_response):
 
        """
 
        Parse the request body as JSON, look up the method on the
 
        controller and if it exists, dispatch to it.
 
        """
 
        self._req_id = None
 
        if 'CONTENT_LENGTH' not in environ:
 
            log.debug("No Content-Length")
 
            return jsonrpc_error(message="No Content-Length in request")
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="No Content-Length in request")
 
        else:
 
            length = environ['CONTENT_LENGTH'] or 0
 
            length = int(environ['CONTENT_LENGTH'])
 
            log.debug('Content-Length: %s' % length)
 

	
 
        if length == 0:
 
            log.debug("Content-Length is 0")
 
            return jsonrpc_error(message="Content-Length is 0")
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="Content-Length is 0")
 

	
 
        raw_body = environ['wsgi.input'].read(length)
 

	
 
        try:
 
            json_body = json.loads(urllib.unquote_plus(raw_body))
 
        except ValueError, e:
 
            # catch JSON errors Here
 
            return jsonrpc_error(message="JSON parse error ERR:%s RAW:%r" \
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="JSON parse error ERR:%s RAW:%r" \
 
                                 % (e, urllib.unquote_plus(raw_body)))
 

	
 
        # check AUTH based on API KEY
 
        try:
 
            self._req_api_key = json_body['api_key']
 
            self._req_id = json_body['id']
 
            self._req_method = json_body['method']
 
            self._request_params = json_body['args']
 
            log.debug(
 
                'method: %s, params: %s' % (self._req_method,
 
                                            self._request_params)
 
            )
 
        except KeyError, e:
 
            return jsonrpc_error(message='Incorrect JSON query missing %s' % e)
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message='Incorrect JSON query missing %s' % e)
 

	
 
        # check if we can find this session using api_key
 
        try:
 
            u = User.get_by_api_key(self._req_api_key)
 
            if u is None:
 
                return jsonrpc_error(message='Invalid API KEY')
 
                return jsonrpc_error(retid=self._req_id,
 
                                     message='Invalid API KEY')
 
            auth_u = AuthUser(u.user_id, self._req_api_key)
 
        except Exception, e:
 
            return jsonrpc_error(message='Invalid API KEY')
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message='Invalid API KEY')
 

	
 
        self._error = None
 
        try:
 
            self._func = self._find_method()
 
        except AttributeError, e:
 
            return jsonrpc_error(message=str(e))
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message=str(e))
 

	
 
        # now that we have a method, add self._req_params to
 
        # self.kargs and dispatch control to WGIController
 
        argspec = inspect.getargspec(self._func)
 
        arglist = argspec[0][1:]
 
        defaults = map(type, argspec[3] or [])
 
        default_empty = types.NotImplementedType
 

	
 
        # kw arguments required by this method
 
        func_kwargs = dict(izip_longest(reversed(arglist), reversed(defaults),
 
                                        fillvalue=default_empty))
 

	
 
        # this is little trick to inject logged in user for
 
        # perms decorators to work they expect the controller class to have
 
        # rhodecode_user attribute set
 
        self.rhodecode_user = auth_u
 

	
 
        # This attribute will need to be first param of a method that uses
 
        # api_key, which is translated to instance of user at that name
 
        USER_SESSION_ATTR = 'apiuser'
 

	
 
        if USER_SESSION_ATTR not in arglist:
 
            return jsonrpc_error(message='This method [%s] does not support '
 
                                 'authentication (missing %s param)' %
 
                                 (self._func.__name__, USER_SESSION_ATTR))
 
            return jsonrpc_error(
 
                retid=self._req_id,
 
                message='This method [%s] does not support '
 
                         'authentication (missing %s param)' % (
 
                                    self._func.__name__, USER_SESSION_ATTR)
 
            )
 

	
 
        # get our arglist and check if we provided them as args
 
        for arg, default in func_kwargs.iteritems():
 
            if arg == USER_SESSION_ATTR:
 
                # USER_SESSION_ATTR is something translated from api key and
 
                # this is checked before so we don't need validate it
 
                continue
 

	
 
            # skip the required param check if it's default value is
 
            # NotImplementedType (default_empty)
 
            if (default == default_empty and arg not in self._request_params):
 
                return jsonrpc_error(
 
                    retid=self._req_id,
 
                    message=(
 
                        'Missing non optional `%s` arg in JSON DATA' % arg
 
                    )
 
                )
 

	
 
        self._rpc_args = {USER_SESSION_ATTR: u}
 
        self._rpc_args.update(self._request_params)
 

	
 
        self._rpc_args['action'] = self._req_method
 
        self._rpc_args['environ'] = environ
 
        self._rpc_args['start_response'] = start_response
 

	
 
        status = []
 
        headers = []
 
        exc_info = []
 

	
 
        def change_content(new_status, new_headers, new_exc_info=None):
 
            status.append(new_status)
 
            headers.extend(new_headers)
 
            exc_info.append(new_exc_info)
 

	
 
        output = WSGIController.__call__(self, environ, change_content)
 
        output = list(output)
 
        headers.append(('Content-Length', str(len(output[0]))))
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -135,93 +135,128 @@ class ApiController(JSONRPCController):
 
        """
 
        Create new user
 

	
 
        :param apiuser:
 
        :param username:
 
        :param password:
 
        :param email:
 
        :param name:
 
        :param lastname:
 
        :param active:
 
        :param admin:
 
        :param ldap_dn:
 
        """
 
        if User.get_by_username(username):
 
            raise JSONRPCError("user %s already exist" % username)
 

	
 
        if User.get_by_email(email, case_insensitive=True):
 
            raise JSONRPCError("email %s already exist" % email)
 

	
 
        if ldap_dn:
 
            # generate temporary password if ldap_dn
 
            password = PasswordGenerator().gen_password(length=8)
 

	
 
        try:
 
            usr = UserModel().create_or_update(
 
            user = UserModel().create_or_update(
 
                username, password, email, firstname,
 
                lastname, active, admin, ldap_dn
 
            )
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='created new user %s' % username
 
                id=user.user_id,
 
                msg='created new user %s' % username,
 
                user=dict(
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap_dn=user.ldap_dn,
 
                    last_login=user.last_login,
 
                )
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create user %s' % username)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def update_user(self, apiuser, userid, username, password, email,
 
                    firstname, lastname, active, admin, ldap_dn):
 
        """
 
        Updates given user
 

	
 
        :param apiuser:
 
        :param username:
 
        :param password:
 
        :param email:
 
        :param name:
 
        :param lastname:
 
        :param active:
 
        :param admin:
 
        :param ldap_dn:
 
        """
 
        if not UserModel().get_user(userid):
 
            raise JSONRPCError("user %s does not exist" % username)
 
        usr = UserModel().get_user(userid)
 
        if not usr:
 
            raise JSONRPCError("user ID:%s does not exist" % userid)
 

	
 
        try:
 
            usr = UserModel().create_or_update(
 
                username, password, email, firstname,
 
                lastname, active, admin, ldap_dn
 
            )
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='updated user %s' % username
 
                msg='updated user ID:%s %s' % (usr.user_id, usr.username)
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to update user %s' % username)
 
            raise JSONRPCError('failed to update user %s' % userid)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def delete_user(self, apiuser, userid):
 
        """"
 
        Deletes an user
 

	
 
        :param apiuser:
 
        """
 
        usr = UserModel().get_user(userid)
 
        if not usr:
 
            raise JSONRPCError("user ID:%s does not exist" % userid)
 

	
 
        try:
 
            UserModel().delete(userid)
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='deleted user ID:%s %s' % (usr.user_id, usr.username)
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to delete ID:%s %s' % (usr.user_id,
 
                                                              usr.username))
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_users_group(self, apiuser, group_name):
 
        """"
 
        Get users group by name
 

	
 
        :param apiuser:
 
        :param group_name:
 
        """
 

	
 
        users_group = UsersGroup.get_by_group_name(group_name)
 
        if not users_group:
 
            return None
 

	
 
        members = []
 
        for user in users_group.members:
 
            user = user.user
 
            members.append(dict(id=user.user_id,
 
                            username=user.username,
 
                            firstname=user.name,
 
                            lastname=user.lastname,
 
                            email=user.email,
 
                            active=user.active,
 
                            admin=user.admin,
 
@@ -333,49 +368,49 @@ class ApiController(JSONRPCController):
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            success = UsersGroupModel().remove_user_from_group(users_group, user)
 
            msg = 'removed member %s from users group %s' % (username, group_name)
 
            msg = msg if success else "User wasn't in group"
 
            Session.commit()
 
            return dict(success=success, msg=msg)
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to remove user from group')
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repo(self, apiuser, repoid):
 
        """"
 
        Get repository by name
 

	
 
        :param apiuser:
 
        :param repo_name:
 
        """
 

	
 
        repo = RepoModel().get_repo(repoid)
 
        if repo is None:
 
            raise JSONRPCError('unknown repository %s' % repo)
 
            raise JSONRPCError('unknown repository "%s"' % (repo or repoid))
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user = user.user
 
            members.append(
 
                dict(
 
                    type="user",
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap=user.ldap_dn,
 
                    permission=perm
 
                )
 
            )
 
        for users_group in repo.users_group_to_perm:
 
            perm = users_group.permission.permission_name
 
            users_group = users_group.users_group
 
            members.append(
 
                dict(
 
@@ -465,63 +500,80 @@ class ApiController(JSONRPCController):
 
        """
 

	
 
        try:
 
            owner = User.get_by_username(owner_name)
 
            if owner is None:
 
                raise JSONRPCError('unknown user %s' % owner_name)
 

	
 
            if Repository.get_by_repo_name(repo_name):
 
                raise JSONRPCError("repo %s already exist" % repo_name)
 

	
 
            groups = repo_name.split(Repository.url_sep())
 
            real_name = groups[-1]
 
            # create structure of groups
 
            group = map_groups(repo_name)
 

	
 
            repo = RepoModel().create(
 
                dict(
 
                    repo_name=real_name,
 
                    repo_name_full=repo_name,
 
                    description=description,
 
                    private=private,
 
                    repo_type=repo_type,
 
                    repo_group=group.group_id if group else None,
 
                    clone_uri=clone_uri
 
                ),
 
                owner
 
                )
 
            )
 
            Session.commit()
 

	
 
            return dict(
 
                id=repo.repo_id,
 
                msg="Created new repository %s" % repo.repo_name
 
                msg="Created new repository %s" % (repo.repo_name),
 
                repo=dict(
 
                    id=repo.repo_id,
 
                    repo_name=repo.repo_name,
 
                    type=repo.repo_type,
 
                    clone_uri=repo.clone_uri,
 
                    private=repo.private,
 
                    created_on=repo.created_on,
 
                    description=repo.description,
 
                )
 
            )
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def fork_repo(self, apiuser, repoid):
 
        repo = RepoModel().get_repo(repoid)
 
        if repo is None:
 
            raise JSONRPCError('unknown repository "%s"' % (repo or repoid))
 

	
 
        RepoModel().create_fork(form_data, cur_user)
 

	
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def delete_repo(self, apiuser, repo_name):
 
        """
 
        Deletes a given repository
 

	
 
        :param repo_name:
 
        """
 
        if not Repository.get_by_repo_name(repo_name):
 
            raise JSONRPCError("repo %s does not exist" % repo_name)
 
        try:
 
            RepoModel().delete(repo_name)
 
            Session.commit()
 
            return dict(
 
                msg='Deleted repository %s' % repo_name
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to delete repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def grant_user_permission(self, apiuser, repo_name, username, perm):
 
        """
 
        Grant permission for user on given repository, or update existing one
 
        if found
 

	
rhodecode/controllers/changelog.py
Show inline comments
 
@@ -5,61 +5,59 @@
 

	
 
    changelog controller for rhodecode
 

	
 
    :created_on: Apr 21, 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
 

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

	
 
import rhodecode.lib.helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.helpers import RepoPage
 
from rhodecode.lib.compat import json
 

	
 
from rhodecode.lib.graphmod import _colored, _dagwalker
 
from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError
 
from rhodecode.model.db import Repository
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class ChangelogController(BaseRepoController):
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(ChangelogController, self).__before__()
 
        c.affected_files_cut_off = 60
 

	
 
    def index(self):
 
        limit = 100
 
        default = 20
 
        if request.params.get('size'):
 
            try:
 
                int_size = int(request.params.get('size'))
 
            except ValueError:
 
                int_size = default
 
            int_size = int_size if int_size <= limit else limit
 
            c.size = int_size
 
            session['changelog_size'] = c.size
 
@@ -97,39 +95,30 @@ class ChangelogController(BaseRepoContro
 
            [(k, k) for k in c.rhodecode_repo.branches.keys()]
 

	
 
        return render('changelog/changelog.html')
 

	
 
    def changelog_details(self, cs):
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            c.cs = c.rhodecode_repo.get_changeset(cs)
 
            return render('changelog/changelog_details.html')
 

	
 
    def _graph(self, repo, collection, repo_size, size, p):
 
        """
 
        Generates a DAG graph for mercurial
 

	
 
        :param repo: repo instance
 
        :param size: number of commits to show
 
        :param p: page number
 
        """
 
        if not collection:
 
            c.jsdata = json.dumps([])
 
            return
 

	
 
        data = []
 
        revs = [x.revision for x in collection]
 

	
 
        if repo.alias == 'git':
 
            for _ in revs:
 
                vtx = [0, 1]
 
                edges = [[0, 0, 1]]
 
                data.append(['', vtx, edges])
 

	
 
        elif repo.alias == 'hg':
 
            dag = graphmod.dagwalker(repo._repo, revs)
 
            c.dag = graphmod.colored(dag, repo._repo)
 
            for (id, type, ctx, vtx, edges) in c.dag:
 
                if type != graphmod.CHANGESET:
 
                    continue
 
        dag = _dagwalker(repo, revs, repo.alias)
 
        dag = _colored(dag)
 
        for (id, type, ctx, vtx, edges) in dag:
 
                data.append(['', vtx, edges])
 

	
 
        c.jsdata = json.dumps(data)
rhodecode/controllers/changeset.py
Show inline comments
 
@@ -19,56 +19,57 @@
 
# 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
 
from collections import defaultdict
 
from webob.exc import HTTPForbidden
 

	
 
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.vcs.exceptions import RepositoryError, ChangesetError, \
 
    ChangesetDoesNotExistError
 
from rhodecode.lib.vcs.nodes import FileNode
 

	
 
import rhodecode.lib.helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.utils import EmptyChangeset
 
from rhodecode.lib.utils import EmptyChangeset, action_logger
 
from rhodecode.lib.compat import OrderedDict
 
from rhodecode.lib import diffs
 
from rhodecode.model.db import ChangesetComment, ChangesetStatus
 
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
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def _update_with_GET(params, GET):
 
    for k in ['diff1', 'diff2', 'diff']:
 
        params[k] += GET.getall(k)
 

	
 

	
 
def anchor_url(revision, path, GET):
 
    fid = h.FID(revision, path)
 
    return h.url.current(anchor=fid, **dict(GET))
 

	
 

	
 
def get_ignore_ws(fid, GET):
 
    ig_ws_global = GET.get('ignorews')
 
    ig_ws = filter(lambda k: k.startswith('WS'), GET.getall(fid))
 
    if ig_ws:
 
        try:
 
            return int(ig_ws[0].split(':')[-1])
 
        except:
 
            pass
 
    return ig_ws_global
 

	
 
@@ -145,48 +146,51 @@ def _context_url(GET, fileid=None):
 
    # per file option
 
    else:
 
        params[fileid] += ['C:%s' % ln_ctx]
 
        ig_ws_key = fileid
 
        ig_ws_val = 'WS:%s' % 1
 

	
 
    if ig_ws:
 
        params[ig_ws_key] += [ig_ws_val]
 

	
 
    lbl = _('%s line context') % ln_ctx
 

	
 
    params['anchor'] = fileid
 
    img = h.image(h.url('/images/icons/table_add.png'), lbl, class_='icon')
 
    return h.link_to(img, h.url.current(**params), title=lbl, class_='tooltip')
 

	
 

	
 
class ChangesetController(BaseRepoController):
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(ChangesetController, self).__before__()
 
        c.affected_files_cut_off = 60
 
        repo_model = RepoModel()
 
        c.users_array = repo_model.get_users_js()
 
        c.users_groups_array = repo_model.get_users_groups_js()
 

	
 
    def index(self, revision):
 

	
 
        c.anchor_url = anchor_url
 
        c.ignorews_url = _ignorews_url
 
        c.context_url = _context_url
 
        limit_off = request.GET.get('fulldiff')
 
        #get ranges of revisions if preset
 
        rev_range = revision.split('...')[:2]
 
        enable_comments = True
 
        try:
 
            if len(rev_range) == 2:
 
                enable_comments = False
 
                rev_start = rev_range[0]
 
                rev_end = rev_range[1]
 
                rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
 
                                                            end=rev_end)
 
            else:
 
                rev_ranges = [c.rhodecode_repo.get_changeset(revision)]
 

	
 
            c.cs_ranges = list(rev_ranges)
 
            if not c.cs_ranges:
 
                raise RepositoryError('Changeset range returned empty result')
 

	
 
@@ -370,50 +374,54 @@ class ChangesetController(BaseRepoContro
 
    def comment(self, repo_name, revision):
 
        status = request.POST.get('changeset_status')
 
        change_status = request.POST.get('change_changeset_status')
 

	
 
        comm = ChangesetCommentsModel().create(
 
            text=request.POST.get('text'),
 
            repo_id=c.rhodecode_db_repo.repo_id,
 
            user_id=c.rhodecode_user.user_id,
 
            revision=revision,
 
            f_path=request.POST.get('f_path'),
 
            line_no=request.POST.get('line'),
 
            status_change=(ChangesetStatus.get_status_lbl(status) 
 
                           if status and change_status else None)
 
        )
 

	
 
        # get status if set !
 
        if status and change_status:
 
            ChangesetStatusModel().set_status(
 
                c.rhodecode_db_repo.repo_id,
 
                revision,
 
                status,
 
                c.rhodecode_user.user_id,
 
                comm,
 
            )
 
        action_logger(self.rhodecode_user,
 
                      'user_commented_revision:%s' % revision,
 
                      c.rhodecode_db_repo, self.ip_addr, self.sa)
 

	
 
        Session.commit()
 

	
 
        if not request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return redirect(h.url('changeset_home', repo_name=repo_name,
 
                                  revision=revision))
 

	
 
        data = {
 
           'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))),
 
        }
 
        if comm:
 
            c.co = comm
 
            data.update(comm.get_dict())
 
            data.update({'rendered_text':
 
                         render('changeset/changeset_comment_block.html')})
 

	
 
        return data
 

	
 
    @jsonify
 
    def delete_comment(self, repo_name, comment_id):
 
        co = ChangesetComment.get(comment_id)
 
        owner = lambda: co.author.user_id == c.rhodecode_user.user_id
 
        if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
 
            ChangesetCommentsModel().delete(comment=co)
 
            Session.commit()
 
            return True
 
        else:
rhodecode/controllers/feed.py
Show inline comments
 
@@ -7,121 +7,122 @@
 

	
 
    :created_on: Apr 23, 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
 

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

	
 
from rhodecode.lib.utils2 import safe_unicode
 
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 webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 
from rhodecode.lib.diffs import DiffProcessor
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class FeedController(BaseRepoController):
 

	
 
    @LoginRequired(api_access=True)
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(FeedController, self).__before__()
 
        #common values for feeds
 
        self.description = _('Changes on %s repository')
 
        self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s')
 
        self.language = 'en-us'
 
        self.ttl = "5"
 
        self.feed_nr = 10
 
        self.feed_nr = 20
 

	
 
    def _get_title(self, cs):
 
        return "R%s:%s - %s" % (
 
            cs.revision, cs.short_id, cs.message
 
        return "%s" % (
 
            h.shorter(cs.message, 160)
 
        )
 

	
 
    def __changes(self, cs):
 
        changes = []
 

	
 
        a = [safe_unicode(n.path) for n in cs.added]
 
        if a:
 
            changes.append('\nA ' + '\nA '.join(a))
 

	
 
        m = [safe_unicode(n.path) for n in cs.changed]
 
        if m:
 
            changes.append('\nM ' + '\nM '.join(m))
 
        diffprocessor = DiffProcessor(cs.diff())
 
        stats = diffprocessor.prepare(inline_diff=False)
 
        for st in stats:
 
            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
 

	
 
        d = [safe_unicode(n.path) for n in cs.removed]
 
        if d:
 
            changes.append('\nD ' + '\nD '.join(d))
 

	
 
        changes.append('</pre>')
 

	
 
        return ''.join(changes)
 
    def __get_desc(self, cs):
 
        desc_msg = []
 
        desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'),
 
                                           cs.date))
 
        desc_msg.append('<pre>')
 
        desc_msg.append(cs.message)
 
        desc_msg.append('\n')
 
        desc_msg.extend(self.__changes(cs))
 
        desc_msg.append('</pre>')
 
        return desc_msg
 

	
 
    def atom(self, repo_name):
 
        """Produce an atom-1.0 feed via feedgenerator module"""
 
        feed = Atom1Feed(
 
             title=self.title % repo_name,
 
             link=url('summary_home', repo_name=repo_name,
 
                      qualified=True),
 
             description=self.description % repo_name,
 
             language=self.language,
 
             ttl=self.ttl
 
        )
 

	
 
        for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
 
            desc_msg = []
 
            desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date))
 
            desc_msg.append(self.__changes(cs))
 

	
 
            feed.add_item(title=self._get_title(cs),
 
                          link=url('changeset_home', repo_name=repo_name,
 
                                   revision=cs.raw_id, qualified=True),
 
                          author_name=cs.author,
 
                          description=''.join(desc_msg))
 
                          description=''.join(self.__get_desc(cs)),
 
                          pubdate=cs.date,
 
                          )
 

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

	
 
    def rss(self, repo_name):
 
        """Produce an rss2 feed via feedgenerator module"""
 
        feed = Rss201rev2Feed(
 
            title=self.title % repo_name,
 
            link=url('summary_home', repo_name=repo_name,
 
                     qualified=True),
 
            description=self.description % repo_name,
 
            language=self.language,
 
            ttl=self.ttl
 
        )
 

	
 
        for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
 
            desc_msg = []
 
            desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date))
 
            desc_msg.append(self.__changes(cs))
 

	
 
            feed.add_item(title=self._get_title(cs),
 
                          link=url('changeset_home', repo_name=repo_name,
 
                                   revision=cs.raw_id, qualified=True),
 
                          author_name=cs.author,
 
                          description=''.join(desc_msg),
 
                          description=''.join(self.__get_desc(cs)),
 
                          pubdate=cs.date,
 
                         )
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
rhodecode/controllers/journal.py
Show inline comments
 
@@ -171,72 +171,70 @@ class JournalController(BaseController):
 
        c.journal_data = render('journal/journal_data.html')
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return c.journal_data
 
        return render('journal/public_journal.html')
 

	
 
    @LoginRequired(api_access=True)
 
    def public_journal_atom(self):
 
        """
 
        Produce an atom-1.0 feed via feedgenerator module
 
        """
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
            .all()
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        feed = Atom1Feed(title=self.title % 'atom',
 
                         link=url('public_journal_atom', qualified=True),
 
                         description=_('Public journal'),
 
                         language=self.language,
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            #tmpl = h.action_parser(entry)[0]
 
            action, action_extra = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action,
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          description=desc)
 

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

	
 
    @LoginRequired(api_access=True)
 
    def public_journal_rss(self):
 
        """
 
        Produce an rss2 feed via feedgenerator module
 
        """
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
            .all()
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        feed = Rss201rev2Feed(title=self.title % 'rss',
 
                         link=url('public_journal_rss', qualified=True),
 
                         description=_('Public journal'),
 
                         language=self.language,
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            #tmpl = h.action_parser(entry)[0]
 
            action, action_extra = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action,
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          description=desc)
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
rhodecode/controllers/settings.py
Show inline comments
 
@@ -83,76 +83,76 @@ class SettingsController(BaseRepoControl
 
            defaults=defaults,
 
            encoding="UTF-8",
 
            force_defaults=False
 
        )
 

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

	
 
        self.__load_defaults()
 

	
 
        _form = RepoSettingsForm(edit=True,
 
                                 old_data={'repo_name': repo_name},
 
                                 repo_groups=c.repo_groups_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 

	
 
            repo_model.update(repo_name, form_result)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('Repository %s updated successfully' % repo_name),
 
                    category='success')
 
            changed_name = form_result['repo_name_full']
 
            action_logger(self.rhodecode_user, 'user_updated_repo',
 
                          changed_name, '', self.sa)
 
                          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})
 
            return htmlfill.render(
 
                render('settings/repo_settings.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of repository %s') \
 
                    % repo_name, category='error')
 

	
 
        return redirect(url('repo_settings_home', repo_name=changed_name))
 

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

	
 
        repo_model = RepoModel()
 
        repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was moved or renamed  from the filesystem'
 
                      ' please run the application again'
 
                      ' in order to rescan repositories') % repo_name,
 
                      category='error')
 

	
 
            return redirect(url('home'))
 
        try:
 
            action_logger(self.rhodecode_user, 'user_deleted_repo',
 
                              repo_name, '', self.sa)
 
                              repo_name, self.ip_addr, self.sa)
 
            repo_model.delete(repo)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('deleted repository %s') % repo_name, category='success')
 
            Session.commit()
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of %s') % repo_name,
 
                    category='error')
 

	
 
        return redirect(url('home'))
rhodecode/i18n/en/LC_MESSAGES/rhodecode.po
Show inline comments
 
# English translations for rhodecode.
 
# Copyright (C) 2010 ORGANIZATION
 
# This file is distributed under the same license as the rhodecode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\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"
 
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

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

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:107
 
@@ -160,112 +160,112 @@ msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

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

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

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 
@@ -372,104 +372,104 @@ msgid "Enabled"
 
msgstr ""
 

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

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

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

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

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

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

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

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

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

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

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

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

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

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

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

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

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

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

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

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

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

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

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

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

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

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
@@ -521,119 +521,119 @@ msgstr ""
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr ""
 

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

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

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

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

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

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

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr ""
 

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

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

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

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

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

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

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

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

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/lib/helpers.py:419
 
@@ -649,102 +649,122 @@ msgstr ""
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr ""
 

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

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr ""
 

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

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

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

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

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

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

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

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

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

	
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr ""
 

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

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

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

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

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

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

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

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

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

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

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

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

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

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr ""
 

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

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

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

	
 
@@ -950,49 +970,49 @@ msgstr ""
 
#: rhodecode/model/user.py:235
 
msgid "new user registration"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
@@ -1005,186 +1025,186 @@ msgstr ""
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr ""
 

	
 
@@ -1202,63 +1222,63 @@ msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: 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_my_account.html:85
 
#: 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_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
@@ -1279,73 +1299,73 @@ msgstr ""
 

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

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
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:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
@@ -1384,49 +1404,49 @@ msgstr ""
 
msgid "Attribute mappings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
@@ -1536,49 +1556,49 @@ msgid "Keep it short and to the point. U
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr ""
 

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

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

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
@@ -1694,98 +1714,87 @@ msgstr ""
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr ""
 

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

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

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr ""
 
@@ -1794,49 +1803,49 @@ msgstr ""
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/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
 
msgid "save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr ""
 
@@ -2018,131 +2027,131 @@ msgstr ""
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
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 ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: 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_my_account.html:67
 
#: 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_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr ""
 

	
 
@@ -2201,48 +2210,53 @@ msgstr ""
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr ""
 

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

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 
@@ -2360,63 +2374,67 @@ msgstr ""
 
msgid "permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
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"
 
@@ -2503,110 +2521,110 @@ msgstr ""
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
@@ -3049,30 +3067,30 @@ msgstr ""
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr ""
 

	
 
#~ msgid ""
 
#~ "Changeset was to big and was cut"
 
#~ " off, use diff menu to display "
 
#~ "this diff"
 
#~ msgid "[committed via RhodeCode] into"
 
#~ msgstr ""
 

	
 
#~ msgid "[pulled from remote] into"
 
#~ msgstr ""
 

	
rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po
Show inline comments
 
# French translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.1.5\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2012-05-20 11:36+0100\n"
 
"Last-Translator: Vincent Duvert <vincent@duvert.net>\n"
 
"Language-Team: fr <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr "Toutes les branches"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr "afficher les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr "ignorer les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, python-format
 
msgid "%s line context"
 
msgstr "afficher %s lignes de contexte"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "fichier binaire"
 

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

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"Le serveur n’a pas pu interpréter la requête à cause d’une erreur de "
 
"syntaxe"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "Accès interdit à cet ressource"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "Vous n’avez pas la permission de voir cette page"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "Ressource introuvable"
 
@@ -170,119 +170,119 @@ msgstr ""
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été créé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts."
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "dépôt %s forké en tant que %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "Une erreur est survenue durant le fork du dépôt %s."
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "%s — Flux %s du journal public"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "Journal public"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "Un lien de rénitialisation de votre mot de passe vous a été envoyé."
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr ""
 
"Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a "
 
"été envoyé par e-mail."
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "Requête invalide. Essayer de la mettre entre guillemets."
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr ""
 
"L’index de recherche n’est pas présent. Veuillez exécuter l’indexeur de "
 
"code Whoosh."
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr "Une erreur est survenue durant l’opération de recherche."
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "Dépôt %s mis à jour avec succès."
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s."
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été déplacé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts."
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "Dépôt %s supprimé"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr "Erreur pendant la suppression de %s"
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr "Aucune donnée actuellement disponible."
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "La mise à jour des statistiques est désactivée pour ce dépôt."
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr "Base"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr "Un niveau"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr "Sous-arbre"
 
@@ -389,108 +389,108 @@ msgid "Enabled"
 
msgstr "Autorisée"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "Permissions par défaut mises à jour avec succès"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr "erreur pendant la mise à jour des permissions"
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr "[Pas un fork]"
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "Le dépôt %s a été créé depuis %s."
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "Le dépôt %s a été créé."
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr "Une erreur est survenue durant la création du dépôt %s."
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés."
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr "Une erreur est survenue durant la suppression de l’utilisateur du dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 
"Une erreur est survenue durant la suppression du groupe d’utilisateurs de"
 
" ce dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Une erreur est survenue durant la suppression des statistiques du dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr "Une erreur est survenue durant l’invalidation du cache."
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr "La visibilité du dépôt dans le journal public a été mise à jour."
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 
"Une erreur est survenue durant la configuration du journal public pour ce"
 
" dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr "Jeton d’authentification incorrect."
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr "Les changements distants ont été récupérés."
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "Pulled from remote location"
 
msgstr "Les changements distants ont été récupérés."
 

	
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr "Une erreur est survenue durant le pull depuis la source distante."
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr "[Aucun dépôt]"
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#: rhodecode/controllers/admin/repos.py:409
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "Le dépôt %s a été marké comme fork de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr "Une erreur est survenue durant cette opération."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "Le groupe de dépôts %s a été créé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "Une erreur est survenue durant la création du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "Le groupe de dépôts %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
@@ -548,119 +548,119 @@ msgid "Updated mercurial settings"
 
msgstr "Réglages de Mercurial mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "Le nouveau hook a été ajouté."
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "Hooks mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr "Une erreur est survenue durant la création du hook."
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr "La tâche d’e-mail a été créée."
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 
" fonctionnement de l’application."
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr "Votre compte a été mis à jour avec succès"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr "utilisateur %s créé"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr "L’utilisateur a été mis à jour avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr "L’utilisateur a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr "Une erreur est survenue durant la suppression de l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr "Vous ne pouvez pas éditer cet utilisateur"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été accordée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été révoquée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été créé."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr "Le groupe d’utilisateurs a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs."
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action."
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "Vous devez être connecté pour visualiser cette page."
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Cet ensemble de changements était trop gros pour être affiché et a été "
 
"découpé, utilisez le menu « Diff » pour afficher les différences."
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "Aucun changement détecté."
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "Vrai"
 
@@ -679,102 +679,136 @@ msgstr "Dépôt vide"
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Afficher les changements combinés %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr "vue de comparaison"
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "et"
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr "%s de plus"
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "révisions"
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "Nom du fork"
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr "[a créé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:542
 
#: rhodecode/lib/helpers.py:554
 
msgid "[created] repository as fork"
 
msgstr "[a créé] le dépôt en tant que fork"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr "[a forké] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr "[a mis à jour] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:568
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
msgid "[created] user"
 
msgstr "utilisateur %s créé"
 

	
 
#: rhodecode/lib/helpers.py:570
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] user"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/lib/helpers.py:572
 
#, fuzzy, python-format
 
#| msgid "created users group %s"
 
msgid "[created] users group"
 
msgstr "Le groupe d’utilisateurs %s a été créé."
 

	
 
#: rhodecode/lib/helpers.py:574
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] users group"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/lib/helpers.py:576
 
#, fuzzy
 
#| msgid "[created] repository"
 
msgid "[commented] on revision in repository"
 
msgstr "[a créé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr "[a pushé] dans"
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
#: rhodecode/lib/helpers.py:580
 
#, fuzzy
 
#| msgid "[committed via RhodeCode] into"
 
msgid "[committed via RhodeCode] into repository"
 
msgstr "[a commité via RhodeCode] dans"
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
#: rhodecode/lib/helpers.py:582
 
#, fuzzy
 
#| msgid "[pulled from remote] into"
 
msgid "[pulled from remote] into repository"
 
msgstr "[a pullé depuis un site distant] dans"
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr "[a pullé] depuis"
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr "[suit maintenant] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:554
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr "[ne suit plus] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr "et %s de plus"
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr "Aucun fichier"
 

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

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

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

	
 
@@ -996,49 +1030,49 @@ msgid "You can't Edit this user since it
 
msgstr ""
 
"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 
" fonctionnement de l’application."
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le "
 
"bon fonctionnement de l’application."
 

	
 
#: rhodecode/model/user.py:306
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 
"L’utilisateur « %s » possède %s dépôts et ne peut être supprimé. Changez "
 
"les propriétaires de ces dépôts. %s"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "Tableau de bord"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "filtre rapide"
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "Dépôts"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "AJOUTER UN DÉPÔT"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
@@ -1051,186 +1085,186 @@ msgstr "Nom de groupe"
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "Description"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "Groupe de dépôts"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "Nom"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "Dernière modification"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr "Sommet"
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "Propriétaire"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr "RSS"
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr "Atom"
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "S’abonner au flux RSS de %s"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "S’abonner au flux ATOM de %s"
 

	
 
#: rhodecode/templates/index_base.html:130
 
msgid "Group Name"
 
msgstr "Nom du groupe"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr "Tri ascendant"
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr "Tri descendant"
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr "Dernière modification"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr "Aucun élément n’a été trouvé."
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr "Erreur d’intégrité des données."
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr "Chargement…"
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "Connexion"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "Connexion à"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "Nom d’utilisateur"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "Mot de passe"
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr "Se souvenir de moi"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "Mot de passe oublié ?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "Vous n’avez pas de compte ?"
 

	
 
@@ -1248,63 +1282,63 @@ msgstr "Adresse e-mail"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "Réinitialiser mon mot de passe"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "Votre nouveau mot de passe sera envoyé à l’adresse correspondante."
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "Inscription"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "Inscription à"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "Confirmation"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr "Prénom"
 

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

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "E-mail"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "Votre compte utilisateur sera actif dès la fin de l’enregistrement."
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "Votre compte utilisateur devra être activé par un administrateur."
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "Dépôt privé"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "Dépôt public"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
@@ -1325,73 +1359,73 @@ msgstr "Tags"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "Aucun tag n’a été créé pour le moment."
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr "Signets"
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr "Aucun signet n’a été créé."
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "Historique d’administration"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "Action"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "Dépôt"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "Date"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "Depuis l’adresse IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr "Aucune action n’a été enregistrée pour le moment."
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "Administration LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr "LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "Options de connexion"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "Activer le LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "Serveur"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
@@ -1430,49 +1464,49 @@ msgstr "Portée de recherche"
 
msgid "Attribute mappings"
 
msgstr "Correspondance des attributs"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "Attribut pour le nom d’utilisateur"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "Attribut pour le prénom"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "Attribut pour le nom de famille"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "Attribut pour l’e-mail"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "Enregistrer"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr "Mes notifications"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr "Tout marquer comme lu"
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr "Aucune notification pour le moment."
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr "Notification"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
@@ -1589,49 +1623,49 @@ msgstr ""
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 
"Les dépôts privés sont visibles seulement par les utilisateurs ajoutés "
 
"comme collaborateurs."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "Ajouter"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "ajouter un nouveau dépôt"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "Éditer le dépôt"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "éditer"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "URL de clone"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "Activer les statistiques"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr "Afficher les statistiques sur la page du dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "Activer les téléchargements"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
@@ -1753,98 +1787,87 @@ msgstr "Lecture"
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "Écriture"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "Administration"
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "Dépôt privé"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr "Révoquer"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "Ajouter un utilisateur"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "Échec de suppression de l’utilisateur"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "Erreur lors de la suppression du groupe d’utilisateurs."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "Groupe"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "Membres"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "Administration des dépôts"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "Contact"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "Supprimer"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
 

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

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr "avec support de"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "Créer un groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "Groupes de dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "Nouveau groupe de dépôt"
 
@@ -1853,49 +1876,49 @@ msgstr "Nouveau groupe de dépôt"
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "Parent du groupe"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "Enregistrer"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "Éditer le groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "Édition du groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "Réinitialiser"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "Administration des groupes de dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "AJOUTER UN NOUVEAU GROUPE"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr "Nombre de sous-dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "Action"
 
@@ -2082,131 +2105,131 @@ msgstr "Ajouter un utilisateur"
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "Utilisateurs"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "nouvel utilisateur"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
msgid "Password confirmation"
 
msgstr "Confirmation"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "Actif"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "Éditer l'utilisateur"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr "Vous pouvez changer votre avatar sur"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr "en utilisant l’adresse"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr "Clé d’API"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr "DN LDAP"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr "Nouveau mot de passe"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr "Confirmation du nouveau mot de passe"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "Création de dépôts"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "Mon compte"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "Mon compte"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr "Mes dépôts"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr "Mes permissions"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr "AJOUTER"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "Révision"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "privé"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "Aucun dépôt pour le moment"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr "En créer un maintenant"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr "Permission"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "Administration des utilisateurs"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "NOUVEL UTILISATEUR"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "Nom d’utilisateur"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "Prénom"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "Nom de famille"
 

	
 
@@ -2265,48 +2288,53 @@ msgstr "Tout enlever"
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "Membres disponibles"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "Tout ajouter"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr "Membres du groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "Gestion des groupes d’utilisateurs"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "AJOUTER UN NOUVEAU GROUPE"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "Nom du groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr "Membres"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr "Voulez-vous vraiment supprimer le groupe d‘utilisateurs « %s » ?"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "Signaler un bogue"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr "Connexion à votre compte"
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "Mot de passe oublié ?"
 

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

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr "Boîte de réception"
 
@@ -2424,63 +2452,67 @@ msgstr "Groupes d’utilisateurs"
 
msgid "permissions"
 
msgstr "Permissions"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "Followers"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr "Forks"
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "Rechercher"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr "Nouveau commentaire"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "Arrêter de suivre ce dépôt"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "Suivre ce dépôt"
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr "Groupe"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr "Signets"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr "Auteur"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "Date"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "Auteur"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
@@ -2567,114 +2599,114 @@ msgstr "Ajoutés"
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr "%s fichiers affectés"
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr "Changements"
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "Diff brut"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "Télécharger le diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "%d commentaire"
 
msgstr[1] "%d commentaires"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] "(et %d en ligne)"
 
msgstr[1] "(et %d en ligne)"
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr "%s fichiers affectés avec %s insertions et %s suppressions :"
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr "Cet ensemble de changements était trop important et a été découpé…"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr "Envoi…"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr "Commentaire sur la ligne {1}."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 
"Les commentaires sont analysés avec la syntaxe %s, avec le support de la "
 
"commande %s."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 
"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à "
 
"l’utilisateur RhodeCode en question."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr "Commentaire"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr "Masquer"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr "Vous devez être connecté pour poster des commentaires."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr "Se connecter maintenant"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr "Laisser un commentaire"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "Comparaison"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr "Fichiers affectés"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr "Diff"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr "Afficher les commentaires"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"

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

0 comments (0 inline, 0 general)