Mercurial > kallithea
changeset 5530:7f9040460576
Merge stable 0.3
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Fri, 02 Oct 2015 22:46:15 +0200 |
parents | 889ff0f436c8 (current diff) 1c9c3b0f21ae (diff) |
children | 4b647864075e |
files | kallithea/__init__.py kallithea/i18n/fr/LC_MESSAGES/kallithea.po whitespacecleanup.sh |
diffstat | 64 files changed, 2120 insertions(+), 884 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Tue Sep 08 10:56:22 2015 +0000 +++ b/.hgignore Fri Oct 02 22:46:15 2015 +0200 @@ -28,3 +28,4 @@ ^my\.ini$ ^fabfile.py ^\.idea$ +^\.cache$
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgsigs Fri Oct 02 22:46:15 2015 +0200 @@ -0,0 +1,1 @@ +9b3e9e242f5c97cc0c7657e5ac93dce7de61ca16 0 iQEcBAABAgAGBQJWDuAdAAoJEJ1bI/kYT6UUAlYH/ReCa7Im5tvy+ot5oAc7xey/O2rCVHp2h6i82tTWK/0i9EaS4DP+eTbAjV4WJA4qWF5DPenEJ3X9JhrTLNvGkR0f7lUqiFVMTJ472YlSsvIWg38gVFruzwk1cODRfq72o8ERYcRSfzrL4cDpIqjEd/vVVCV/gKVvPmzr4/FED/ZmS0X6T9gxWJo/eWSuLNAxHHtE/pCWDO3XEe+iOm+hHjkyz4Hn2r9/+ucrirnzycH6DnYO/kWvQzBnzgMjJm+1rLZ5cfU89V8zfhv6z0pd8CHZfpKGc2Z8EwVJq9LR+M4/76uDlYXx7IfZAxhRNqN6MC+yvPmDo3382dNr7Wkopi0=
--- a/.hgtags Tue Sep 08 10:56:22 2015 +0000 +++ b/.hgtags Fri Oct 02 22:46:15 2015 +0200 @@ -61,3 +61,4 @@ ad0ce803b40cb17fc3988373052943e041030b02 0.2 c6e32714336345403adf76abb6ebf9b8116fcdc7 0.2.1 14f488a5dc4ca6647bc6acf12534fd137e968aa8 0.2.2 +9b3e9e242f5c97cc0c7657e5ac93dce7de61ca16 0.3
--- a/CONTRIBUTORS Tue Sep 08 10:56:22 2015 +0000 +++ b/CONTRIBUTORS Fri Oct 02 22:46:15 2015 +0200 @@ -35,6 +35,7 @@ Niemand Jedermann <predatorix@web.de> 2015 Peter Vitt <petervitt@web.de> 2015 Robert Martinez <ntttq@inboxen.org> 2015 + Robert Rauch <mail@robertrauch.de> 2015 Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> 2015 Sam Jaques <sam.jaques@me.com> 2015 Søren Løvborg <sorenl@unity3d.com> 2015
--- a/README.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/README.rst Fri Oct 02 22:46:15 2015 +0200 @@ -37,6 +37,13 @@ Please visit https://docs.kallithea-scm.org/en/latest/installation.html for more details. +There is also an experimental `Puppet module`_ for installing and setting up +Kallithea. Currently, only basic functionality is provided, but it is still +enough to get up and running quickly, especially for people without Python +background. See +https://docs.kallithea-scm.org/en/latest/installation_puppet.html for further +information. + Source code ----------- @@ -178,7 +185,7 @@ This location will depend on where you installed Kallithea. If you installed via:: - python setup.py install + python2 setup.py install then you will find this location at ``$VIRTUAL_ENV/lib/python2.7/site-packages/Kallithea-0.1-py2.7.egg/kallithea``. @@ -194,7 +201,7 @@ cd /path/to/kallithea cp /path/to/rhodecode/rhodecode.db kallithea.db pip install sqlalchemy-migrate - python kallithea/bin/rebranddb.py sqlite:///kallithea.db + python2 kallithea/bin/rebranddb.py sqlite:///kallithea.db .. Note:: @@ -238,3 +245,4 @@ .. _Celery: http://celeryproject.org/ .. _vcs: http://pypi.python.org/pypi/vcs .. _Software Freedom Conservancy: http://sfconservancy.org/ +.. _Puppet module: https://forge.puppetlabs.com/rauch/kallithea
--- a/development.ini Tue Sep 08 10:56:22 2015 +0000 +++ b/development.ini Fri Oct 02 22:46:15 2015 +0200 @@ -57,7 +57,7 @@ ## SMTP server settings ## Only smtp_server is mandatory. All other settings take the specified default ## values. -#smtp_server = mail.server.com +#smtp_server = smtp.example.com #smtp_username = #smtp_password = #smtp_port = 25 @@ -228,8 +228,8 @@ ## gist URL alias, used to create nicer urls for gist. This should be an ## url that does rewrites to _admin/gists/<gistid>. -## example: http://gist.kallithea.server/{gistid}. Empty means use the internal -## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid> +## example: http://gist.example.com/{gistid}. Empty means use the internal +## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid> gist_alias_url = ## white list of API enabled controllers. This allows to add list of @@ -264,7 +264,7 @@ ## fetched from the regex and {repo} is replaced with full repository name ## including groups {repo_name} is replaced with just name of repo -issue_server_link = https://myissueserver.com/{repo}/issue/{id} +issue_server_link = https://issues.example.com/{repo}/issue/{id} ## prefix to add to link to indicate it's an url ## #314 will be replaced by <issue_prefix><id> @@ -274,10 +274,10 @@ ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify ## multiple patterns, to other issues server, wiki or others ## below an example how to create a wiki pattern -# wiki-some-id -> https://mywiki.com/some-id +# wiki-some-id -> https://wiki.example.com/some-id #issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://mywiki.com/{id} +#issue_server_link_wiki = https://wiki.example.com/{id} #issue_prefix_wiki = WIKI- ## instance-id prefix
--- a/docs/api/api.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/api/api.rst Fri Oct 02 22:46:15 2015 +0200 @@ -49,7 +49,7 @@ For example, to pull to a local "CPython" mirror using curl:: - curl https://example.com/_admin/api -X POST -H 'content-type:text/plain' \ + curl https://kallithea.example.com/_admin/api -X POST -H 'content-type:text/plain' \ --data-binary '{"id":1,"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}' In general, provide @@ -83,30 +83,29 @@ For example, to call ``get_repo``:: - kallithea-api --apihost=<your.kallithea.server.url> --apikey=<yourapikey> get_repo + kallithea-api --apihost=<Kallithea URL> --apikey=<API key> get_repo - calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000 - Kallithea said: - {'error': 'Missing non optional `repoid` arg in JSON DATA', - 'id': 75, - 'result': None} + Calling method get_repo => <Kallithea URL> + Server response + ERROR:"Missing non optional `repoid` arg in JSON DATA" Oops, looks like we forgot to add an argument. Let's try again, now providing the ``repoid`` as a parameter:: - kallithea-api get_repo repoid:myrepo + kallithea-api --apihost=<Kallithea URL> --apikey=<API key> get_repo repoid:myrepo - calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "myrepo"}, "method": "get_repo"} to http://127.0.0.1:5000 - Kallithea said: - {'error': None, - 'id': 39, - 'result': <json data...>} + Calling method get_repo => <Kallithea URL> + Server response + { + "clone_uri": null, + "created_on": "2015-08-31T14:55:19.042", + ... To avoid specifying ``apihost`` and ``apikey`` every time, run:: - kallithea-api --save-config --apihost=<your.kallithea.server.url> --apikey=<yourapikey> + kallithea-api --save-config --apihost=<Kallithea URL> --apikey=<API key> -This will create a ``~/.config/kallithea`` with the specified hostname and API key +This will create a ``~/.config/kallithea`` with the specified URL and API key so you don't have to specify them every time.
--- a/docs/contributing.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/contributing.rst Fri Oct 02 22:46:15 2015 +0200 @@ -34,7 +34,8 @@ cd kallithea virtualenv ../kallithea-venv source ../kallithea-venv/bin/activate - python setup.py develop + pip install --upgrade pip setuptools + python2 setup.py develop paster make-config Kallithea my.ini paster setup-db my.ini --user=user --email=user@example.com --password=password --repos=/tmp paster serve my.ini --reload &
--- a/docs/index.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/index.rst Fri Oct 02 22:46:15 2015 +0200 @@ -22,6 +22,7 @@ installation_win_old installation_iis setup + installation_puppet **Usage**
--- a/docs/installation.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/installation.rst Fri Oct 02 22:46:15 2015 +0200 @@ -39,8 +39,9 @@ cd kallithea virtualenv ../kallithea-venv source ../kallithea-venv/bin/activate - python setup.py develop - python setup.py compile_catalog # for translation of the UI + pip install --upgrade pip setuptools + python2 setup.py develop + python2 setup.py compile_catalog # for translation of the UI You can now proceed to :ref:`setup`. @@ -64,14 +65,25 @@ virtualenv /srv/kallithea/venv -- Activate the virtualenv_ in your current shell session by running:: +- Activate the virtualenv_ in your current shell session and make sure the + basic requirements are up-to-date by running:: source /srv/kallithea/venv/bin/activate + pip install --upgrade pip setuptools .. note:: You can't use UNIX ``sudo`` to source the ``virtualenv`` script; it will "activate" a shell that terminates immediately. It is also perfectly acceptable (and desirable) to create a virtualenv as a normal user. +.. note:: Some dependencies are optional. If you need them, install them in + the virtualenv too:: + + pip install psycopg2 + pip install python-ldap + + This might require installation of development packages using your + distribution's package manager. + - Make a folder for Kallithea data files, and configuration somewhere on the filesystem. For example:: @@ -84,7 +96,7 @@ Alternatively, download a .tar.gz from http://pypi.python.org/pypi/Kallithea, extract it and run:: - python setup.py install + python2 setup.py install - This will install Kallithea together with pylons_ and all other required python libraries into the activated virtualenv.
--- a/docs/installation_iis.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/installation_iis.rst Fri Oct 02 22:46:15 2015 +0200 @@ -55,7 +55,7 @@ has been generated, it is necessary to run the following command due to the way that ISAPI-WSGI is made:: - python dispatch.py install + python2 dispatch.py install This accomplishes two things: generating an ISAPI compliant DLL file, ``_dispatch.dll``, and installing a script map handler into IIS for the @@ -103,7 +103,7 @@ In order to dump output from WSGI using ``win32traceutil`` it is sufficient to type the following in a console window:: - python -m win32traceutil + python2 -m win32traceutil and any exceptions occurring in the WSGI layer and below (i.e. in the Kallithea application itself) that are uncaught, will be printed here complete with stack
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/installation_puppet.rst Fri Oct 02 22:46:15 2015 +0200 @@ -0,0 +1,175 @@ +.. _installation_puppet: + +=================================== +Installation and setup using Puppet +=================================== + +The whole installation and setup process of Kallithea can be simplified by +using Puppet and the `rauch/kallithea +<https://forge.puppetlabs.com/rauch/kallithea>`_ Puppet module. This is +especially useful for getting started quickly, without having to deal with all +the Python specialities. + +.. note:: The following instructions assume you are not familiar with Puppet at + all. If this is not the case, you should probably skip directly to the + `Kallithea Puppet module documentation + <https://forge.puppetlabs.com/rauch/kallithea#puppet-kallithea>`_. + + +Installing Puppet +----------------- + +This installation variant requires a Unix/Linux type server with Puppet 3.0+ +installed. Many major distributions have Puppet in their standard repositories. +Thus, you will probably be ready to go by running, e.g. ``apt-get install +puppet`` or ``yum install puppet``, depending on your distro's favoured package +manager. Afterwards, check the Puppet version by running ``puppet --version`` +and ensure you have at least 3.0. + +If your distribution does not provide Puppet packages or you need a +newer version, please see the `Puppet Reference Manual +<https://docs.puppetlabs.com/puppet/4.2/reference/install_linux.html>`_ for +instructions on how to install Puppet on your target platform. + + +Installing the Puppet module +---------------------------- + +To install the latest version of the Kallithea Puppet module from the Puppet +Forge, run the following as ``root``: + +.. code-block:: bash + + puppet module install rauch/kallithea + +This will install both the Kallithea Puppet module and its dependency modules. + +.. warning:: Be aware that Puppet can do all kinds of things to your systems. + Third-party modules (like the ``kallithea`` module) may run + arbitrary commands on your system (most of the time as the + ``root`` user), so do not apply them on production machines if + you don't know what you are doing. Instead, use a test system + (e.g. a virtual machine) for evaluation purposes. + + +Applying the module +------------------- + +To trigger the actual installation process, we have to *apply* the +``kallithea`` Puppet class, which is provided by the module we have just +installed, to our system. For this, create a file named e.g. ``kallithea.pp``, +a *Puppet manifest*, with the following content: + +.. _simple_manifest: +.. code-block:: puppet + + class { 'kallithea': + seed_db => true, + manage_git => true, + } + +To apply the manifest, simply run the following (preferably as root): + +.. code-block:: bash + + puppet apply kallithea.pp + +This will basically run through the usual Kallithea :ref:`installation` and +:ref:`setup` steps, as documented. Consult the module documentation for details +on `what the module affects +<https://forge.puppetlabs.com/rauch/kallithea#what-kallithea-affects>`_. You +can also do a *dry run* by adding the ``--noop`` option to the command. + + +Using parameters for customizing the setup process +-------------------------------------------------- + +The ``kallithea`` Puppet class provides a number of `parameters +<https://forge.puppetlabs.com/rauch/kallithea#class-kallithea>`_ for +customizing the setup process. You have seen the usage of the ``seed_db`` +parameter in the :ref:`example above <simple_manifest>`, but there are more. +For example, you can specify the installation directory, the name of the user +under which Kallithea gets installed, the initial admin password, etc. +Notably, you can provide arbitrary modifications to Kallitheas configuration +file by means of the ``config_hash`` parameter. + +Parameters, which have not been set explicitly, will be set to default values, +which are defined inside the ``kallithea`` Puppet module. For example, if you +just stick to the defaults as in the :ref:`example above <simple_manifest>`, +you will end up with a Kallithea instance, which + +- is installed in ``/srv/kallithea``, owned by the user ``kallithea`` +- uses the Kallithea default configuration +- uses the admin user ``admin`` with password ``adminpw`` +- is started automatically and enabled on boot + +As of Kallithea 0.3.0, this in particular means that Kallithea will use an +SQLite database and listen on ``http://localhost:5000``. + +See also the `full parameters list +<https://forge.puppetlabs.com/rauch/kallithea#class-kallithea>`_ for more +information. + + +Making your Kallithea instance publicly available +------------------------------------------------- + +If you followed the instructions above, the Kallithea instance will be +listening on ``http://localhost:5000`` and therefore not publicly available. +There are several ways to change this. + +The direct way +^^^^^^^^^^^^^^ + +The simplest setup is to instruct Kallithea to listen on another IP address +and/or port by using the ``config_hash`` parameter of the Kallithea Puppet +class. For example, assume we want to listen on all interfaces on port 80: + +.. code-block:: puppet + + class { 'kallithea': + seed_db => true, + config_hash => { + "server:main" => { + 'host' => '0.0.0.0', + 'port' => '80', + } + } + } + +Using Apache as reverse proxy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In a more advanced setup, you might instead want use a full-blown web server +like Apache HTTP Server as the public web server, configured such that requests +are internally forwarded to the local Kallithea instance (a so called *reverse +proxy setup*). This can be easily done with Puppet as well: + +First, install the `puppetlabs/apache +<https://forge.puppetlabs.com/puppetlabs/apache>`_ Puppet module as above by running the following as root: + +.. code-block:: bash + + puppet module install puppetlabs/apache + +Then, append the following to your manifest: + +.. code-block:: puppet + + include apache + + apache::vhost { 'kallithea.example.com': + docroot => '/var/www/html', + manage_docroot => false, + port => 80, + proxy_preserve_host => true, + proxy_pass => [ + { + path => '/', + url => 'http://localhost:5000/', + }, + ], + } + +Applying the resulting manifest will install the Apache web server and setup a +virtual host acting as a reverse proxy for your local Kallithea instance.
--- a/docs/installation_win.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/installation_win.rst Fri Oct 02 22:46:15 2015 +0200 @@ -71,7 +71,7 @@ - Go to https://bootstrap.pypa.io - Right-click on get-pip.py and choose Saves as... -- Run "python get-pip.py" in the folder where you downloaded get-pip.py (may require admin access). +- Run "python2 get-pip.py" in the folder where you downloaded get-pip.py (may require admin access). .. note:: @@ -134,6 +134,7 @@ cd C:\Kallithea\Env\Scripts activate + pip install --upgrade pip setuptools The prompt will change into "(Env) C:\\Kallithea\\Env\\Scripts" or similar (depending of your folder structure). Then type::
--- a/docs/installation_win_old.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/installation_win_old.rst Fri Oct 02 22:46:15 2015 +0200 @@ -151,7 +151,7 @@ do so, open a CMD (Python Path should be included in Step3), navigate where you downloaded "virtualenv.py", and write:: - python virtualenv.py C:\Kallithea\Env + python2 virtualenv.py C:\Kallithea\Env (--no-site-packages is now the default behaviour of virtualenv, no need to include it) @@ -183,6 +183,7 @@ cd C:\Kallithea\Env\Scripts (or similar) activate + pip install --upgrade pip setuptools The prompt will change into "(Env) C:\\Kallithea\\Env\\Scripts" or similar (depending of your folder structure). Then type::
--- a/docs/setup.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/setup.rst Fri Oct 02 22:46:15 2015 +0200 @@ -36,7 +36,7 @@ The ``setup-db`` values can also be given on the command line. Example:: - paster setup-db my.ini --user=nn --password=secret --email=nn@example.org --repos=/srv/repos + paster setup-db my.ini --user=nn --password=secret --email=nn@example.com --repos=/srv/repos The ``setup-db`` command will create all needed tables and an admin account. When choosing a root path you can either use a new @@ -108,7 +108,7 @@ example set to ``/srv/repos`` and the repository you are using is named ``kallithea``, then to clone via ssh you should run:: - hg clone ssh://user@server.com//srv/repos/kallithea + hg clone ssh://user@kallithea.example.com/srv/repos/kallithea Using other external tools such as mercurial-server_ or using ssh key-based authentication is fully supported. @@ -176,7 +176,7 @@ Connection settings Enable LDAP = checked - Host = host.example.org + Host = host.example.com Port = 389 Account = <account> Password = <password> @@ -443,7 +443,7 @@ uncomment the following variables in the ini file:: issue_pat = (?:^#|\s#)(\w+) - issue_server_link = https://myissueserver.com/{repo}/issue/{id} + issue_server_link = https://issues.example.com/{repo}/issue/{id} issue_prefix = # ``issue_pat`` is the regular expression describing which strings in @@ -461,13 +461,13 @@ .. code-block:: html - <a href="https://myissueserver.com/example_repo/issue/300">ISSUE-300</a> + <a href="https://issues.example.com/example_repo/issue/300">ISSUE-300</a> If needed, more than one pattern can be specified by appending a unique suffix to the variables. For example:: issue_pat_wiki = (?:wiki-)(.+) - issue_server_link_wiki = https://mywiki.com/{id} + issue_server_link_wiki = https://wiki.example.com/{id} issue_prefix_wiki = WIKI- With these settings, wiki pages can be referenced as wiki-some-id, and every @@ -475,7 +475,7 @@ .. code-block:: html - <a href="https://mywiki.com/some-id">WIKI-some-id</a> + <a href="https://wiki.example.com/some-id">WIKI-some-id</a> Hook management @@ -569,7 +569,7 @@ ## gist alias server { listen 443; - server_name gist.myserver.com; + server_name gist.example.com; access_log /var/log/nginx/gist.access.log; error_log /var/log/nginx/gist.error.log; @@ -583,13 +583,13 @@ ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5; ssl_prefer_server_ciphers on; - rewrite ^/(.+)$ https://your.kallithea.server/_admin/gists/$1; - rewrite (.*) https://your.kallithea.server/_admin/gists; + rewrite ^/(.+)$ https://kallithea.example.com/_admin/gists/$1; + rewrite (.*) https://kallithea.example.com/_admin/gists; } server { listen 443; - server_name your.kallithea.server; + server_name kallithea.example.com access_log /var/log/nginx/kallithea.access.log; error_log /var/log/nginx/kallithea.error.log; @@ -612,7 +612,7 @@ } location @kallithea { - proxy_pass http://kallithea; + proxy_pass http://127.0.0.1:5000; } } @@ -648,8 +648,7 @@ .. code-block:: apache <VirtualHost *:80> - ServerName hg.myserver.com - ServerAlias hg.myserver.com + ServerName kallithea.example.com <Proxy *> # For Apache 2.4 and later:
--- a/docs/usage/general.rst Tue Sep 08 10:56:22 2015 +0000 +++ b/docs/usage/general.rst Fri Oct 02 22:46:15 2015 +0200 @@ -78,11 +78,11 @@ Due to the complicated nature of repository grouping, URLs of repositories can often change. For example, a repository originally accessible from:: - http://example.com/repo_name + http://kallithea.example.com/repo_name would get a new URL after moving it to test_group:: - http://example.com/test_group/repo_name + http://kallithea.example.com/test_group/repo_name Such moving of a repository to a group can be an issue for build systems and other scripts where the repository paths are hardcoded. To mitigate this, @@ -94,7 +94,7 @@ In the example, the repository could also be accessible as:: - http://example.com/_<ID> + http://kallithea.example.com/_<ID> The ID of a given repository can be shown from the repository ``Summary`` page, by selecting the ``Show by ID`` button next to ``Clone URL``. @@ -137,7 +137,7 @@ If you need to clone repositories that are protected via basic authentication, you can pass the credentials in the URL, e.g. -``http://user:passw@remote.server/repo``. Kallithea will then try to login and +``http://user:passw@remote.example.com/repo``. Kallithea will then try to login and clone using the given credentials. Please note that the given credentials will be stored as plaintext inside the database. However, the authentication information will not be shown in the clone URL on the summary page.
--- a/kallithea/__init__.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/__init__.py Fri Oct 02 22:46:15 2015 +0200 @@ -29,7 +29,7 @@ import sys import platform -VERSION = (0, 2, 2) +VERSION = (0, 3) BACKENDS = { 'hg': 'Mercurial repository', 'git': 'Git repository',
--- a/kallithea/bin/kallithea_api.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/bin/kallithea_api.py Fri Oct 02 22:46:15 2015 +0200 @@ -36,7 +36,7 @@ "kallithea-api [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] " "[--config=CONFIG] [--save-config] " "METHOD <key:val> <key2:val> ...\n" - "Create config file: kallithea-api --apikey=<key> --apihost=http://your.kallithea.server --save-config" + "Create config file: kallithea-api --apikey=<key> --apihost=http://kallithea.example.com --save-config" ) parser = argparse.ArgumentParser(description='Kallithea API cli',
--- a/kallithea/bin/kallithea_gist.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/bin/kallithea_gist.py Fri Oct 02 22:46:15 2015 +0200 @@ -39,7 +39,7 @@ "kallithea-gist [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] " "[--config=CONFIG] [--save-config] [GIST OPTIONS] " "[filename or stdin use - for terminal stdin ]\n" - "Create config file: kallithea-gist --apikey=<key> --apihost=http://your.kallithea.server --save-config" + "Create config file: kallithea-gist --apikey=<key> --apihost=http://kallithea.example.com --save-config" ) parser = argparse.ArgumentParser(description='Kallithea Gist cli',
--- a/kallithea/bin/ldap_sync.conf Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/bin/ldap_sync.conf Fri Oct 02 22:46:15 2015 +0200 @@ -1,11 +1,11 @@ [default] -api_url = http://your.kallithea.server:5000/_admin/api +api_url = http://kallithea.example.com/_admin/api api_user = admin api_key = XXXXXXXXXXXX -ldap_uri = ldap://your.ldap.server:389 -ldap_user = cn=kallithea,ou=binders,dc=linaro,dc=org +ldap_uri = ldap://ldap.example.com:389 +ldap_user = cn=kallithea,dc=example,dc=com ldap_key = XXXXXXXXX -base_dn = dc=linaro,dc=org +base_dn = dc=example,dc=com sync_users = True \ No newline at end of file
--- a/kallithea/bin/template.ini.mako Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/bin/template.ini.mako Fri Oct 02 22:46:15 2015 +0200 @@ -51,7 +51,7 @@ <%text>## SMTP server settings</%text> <%text>## Only smtp_server is mandatory. All other settings take the specified default</%text> <%text>## values.</%text> -#smtp_server = mail.server.com +#smtp_server = smtp.example.com #smtp_username = #smtp_password = #smtp_port = 25 @@ -226,8 +226,8 @@ <%text>## gist URL alias, used to create nicer urls for gist. This should be an</%text> <%text>## url that does rewrites to _admin/gists/<gistid>.</%text> -<%text>## example: http://gist.kallithea.server/{gistid}. Empty means use the internal</%text> -<%text>## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid></%text> +<%text>## example: http://gist.example.com/{gistid}. Empty means use the internal</%text> +<%text>## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid></%text> gist_alias_url = <%text>## white list of API enabled controllers. This allows to add list of</%text> @@ -262,7 +262,7 @@ <%text>## fetched from the regex and {repo} is replaced with full repository name</%text> <%text>## including groups {repo_name} is replaced with just name of repo</%text> -issue_server_link = https://myissueserver.com/{repo}/issue/{id} +issue_server_link = https://issues.example.com/{repo}/issue/{id} <%text>## prefix to add to link to indicate it's an url</%text> <%text>## #314 will be replaced by <issue_prefix><id></%text> @@ -272,10 +272,10 @@ <%text>## issue_pat, issue_server_link, issue_prefix can have suffixes to specify</%text> <%text>## multiple patterns, to other issues server, wiki or others</%text> <%text>## below an example how to create a wiki pattern</%text> -# wiki-some-id -> https://mywiki.com/some-id +# wiki-some-id -> https://wiki.example.com/some-id #issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://mywiki.com/{id} +#issue_server_link_wiki = https://wiki.example.com/{id} #issue_prefix_wiki = WIKI- <%text>## instance-id prefix</%text>
--- a/kallithea/config/deployment.ini_tmpl Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/config/deployment.ini_tmpl Fri Oct 02 22:46:15 2015 +0200 @@ -52,7 +52,7 @@ ## SMTP server settings ## Only smtp_server is mandatory. All other settings take the specified default ## values. -#smtp_server = mail.server.com +#smtp_server = smtp.example.com #smtp_username = #smtp_password = #smtp_port = 25 @@ -222,8 +222,8 @@ ## gist URL alias, used to create nicer urls for gist. This should be an ## url that does rewrites to _admin/gists/<gistid>. -## example: http://gist.kallithea.server/{gistid}. Empty means use the internal -## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid> +## example: http://gist.example.com/{gistid}. Empty means use the internal +## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid> gist_alias_url = ## white list of API enabled controllers. This allows to add list of @@ -258,7 +258,7 @@ ## fetched from the regex and {repo} is replaced with full repository name ## including groups {repo_name} is replaced with just name of repo -issue_server_link = https://myissueserver.com/{repo}/issue/{id} +issue_server_link = https://issues.example.com/{repo}/issue/{id} ## prefix to add to link to indicate it's an url ## #314 will be replaced by <issue_prefix><id> @@ -268,10 +268,10 @@ ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify ## multiple patterns, to other issues server, wiki or others ## below an example how to create a wiki pattern -# wiki-some-id -> https://mywiki.com/some-id +# wiki-some-id -> https://wiki.example.com/some-id #issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://mywiki.com/{id} +#issue_server_link_wiki = https://wiki.example.com/{id} #issue_prefix_wiki = WIKI- ## instance-id prefix
--- a/kallithea/controllers/changelog.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/controllers/changelog.py Fri Oct 02 22:46:15 2015 +0200 @@ -98,7 +98,6 @@ # TODO: Somehow just don't send this extra junk in the GET URL if request.GET.get('set'): request.GET.pop('set', None) - request.GET.pop('_authentication_token', None) if revision is None: return redirect(url('changelog_home', repo_name=repo_name, **request.GET)) return redirect(url('changelog_file_home', repo_name=repo_name, revision=revision, f_path=f_path, **request.GET))
--- a/kallithea/controllers/login.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/controllers/login.py Fri Oct 02 22:46:15 2015 +0200 @@ -27,8 +27,8 @@ import logging +import re import formencode -import urlparse from formencode import htmlfill from webob.exc import HTTPFound, HTTPBadRequest @@ -56,32 +56,27 @@ def __before__(self): super(LoginController, self).__before__() - def _validate_came_from(self, came_from): - """Return True if came_from is valid and can and should be used""" - if not came_from: - return False + def _validate_came_from(self, came_from, + _re=re.compile(r"/(?!/)[-!#$%&'()*+,./:;=?@_~0-9A-Za-z]*$")): + """Return True if came_from is valid and can and should be used. + + Determines if a URI reference is valid and relative to the origin; + or in RFC 3986 terms, whether it matches this production: - parsed = urlparse.urlparse(came_from) - server_parsed = urlparse.urlparse(url.current()) - allowed_schemes = ['http', 'https'] - if parsed.scheme and parsed.scheme not in allowed_schemes: - log.error('Suspicious URL scheme detected %s for url %s', - parsed.scheme, parsed) - return False - if server_parsed.netloc != parsed.netloc: - log.error('Suspicious NETLOC detected %s for url %s server url ' - 'is: %s' % (parsed.netloc, parsed, server_parsed)) - return False - return True + origin-relative-ref = path-absolute [ "?" query ] [ "#" fragment ] - def _redirect_to_origin(self, origin): - '''redirect to the original page, preserving any get arguments given''' - request.GET.pop('came_from', None) - raise HTTPFound(location=url(origin, **request.GET)) + with the exception that '%' escapes are not validated and '#' is + allowed inside the fragment part. + """ + return _re.match(came_from) is not None def index(self): c.came_from = safe_str(request.GET.get('came_from', '')) - if not self._validate_came_from(c.came_from): + if c.came_from: + if not self._validate_came_from(c.came_from): + log.error('Invalid came_from (not server-relative): %r', c.came_from) + raise HTTPBadRequest() + else: c.came_from = url('home') not_default = self.authuser.username != User.DEFAULT_USER @@ -89,7 +84,7 @@ # redirect if already logged in if self.authuser.is_authenticated and not_default and ip_allowed: - return self._redirect_to_origin(c.came_from) + raise HTTPFound(location=c.came_from) if request.POST: # import Login Form validator class @@ -119,7 +114,7 @@ else: log_in_user(user, c.form_result['remember'], is_external_auth=False) - return self._redirect_to_origin(c.came_from) + raise HTTPFound(location=c.came_from) return render('/login.html')
--- a/kallithea/controllers/pullrequests.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/controllers/pullrequests.py Fri Oct 02 22:46:15 2015 +0200 @@ -502,9 +502,10 @@ pull_request.title = _form['pullrequest_title'] pull_request.description = _form['pullrequest_desc'].strip() or _('No description') pull_request.owner = User.get_by_username(_form['owner']) + user = User.get(c.authuser.user_id) try: - PullRequestModel().mention_from_description(pull_request, old_description) - PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) + PullRequestModel().mention_from_description(user, pull_request, old_description) + PullRequestModel().update_reviewers(user, pull_request_id, reviewers_ids) except UserInvalidException as u: h.flash(_('Invalid reviewer "%s" specified') % u, category='error') raise HTTPBadRequest() @@ -590,7 +591,7 @@ # candidates: descendants of old head that are on the right branch # and not are the old head itself ... # and nothing at all if old head is a descendant of target ref name - if other_scm_instance._repo.revs('present(%s)::&%s', c.cs_ranges[-1].raw_id, c.a_branch_name): + if not c.is_range and other_scm_instance._repo.revs('present(%s)::&%s', c.cs_ranges[-1].raw_id, c.a_branch_name): c.update_msg = _('This pull request has already been merged to %s.') % c.a_branch_name elif c.pull_request.is_closed(): c.update_msg = _('This pull request has been closed and can not be updated.') @@ -614,10 +615,11 @@ c.update_msg = _('This pull request can be updated with changes on %s:') % c.cs_branch_name else: show = set() + avail_revs = set() # drop revs[0] c.update_msg = _('No changesets found for updating this pull request.') # TODO: handle branch heads that not are tip-most - brevs = org_scm_instance._repo.revs('%s - %ld', c.cs_branch_name, avail_revs) + brevs = org_scm_instance._repo.revs('%s - %ld - %s', c.cs_branch_name, avail_revs, revs[0]) if brevs: # also show changesets that are on branch but neither ancestors nor descendants show.update(org_scm_instance._repo.revs('::%ld - ::%ld - ::%s', brevs, avail_revs, c.a_branch_name))
--- a/kallithea/controllers/summary.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/controllers/summary.py Fri Oct 02 22:46:15 2015 +0200 @@ -195,6 +195,7 @@ stats = self.sa.query(Statistics)\ .filter(Statistics.repository == c.db_repo)\ .scalar() + c.stats_percentage = 0 if stats and stats.languages: c.no_data = False is c.db_repo.enable_statistics lang_stats_d = json.loads(stats.languages)
--- a/kallithea/i18n/fr/LC_MESSAGES/kallithea.po Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/i18n/fr/LC_MESSAGES/kallithea.po Fri Oct 02 22:46:15 2015 +0200 @@ -8,10 +8,10 @@ "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" "POT-Creation-Date: 2015-09-08 10:34+0200\n" -"PO-Revision-Date: 2015-09-07 16:35+0200\n" -"Last-Translator: Andrew Shadura <andrew@shadura.me>\n" +"PO-Revision-Date: 2015-09-10 15:13+0200\n" +"Last-Translator: Étienne Gilli <etienne.gilli@gmail.com>\n" "Language-Team: French " -"<https://hosted.weblate.org/projects/kallithea/kallithea/fr/>\n" +"<https://hosted.weblate.org/projects/kallithea/stable/fr/>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -50,9 +50,9 @@ msgstr "Ignorer les espaces et tabulations" #: kallithea/controllers/changeset.py:169 -#, fuzzy, python-format +#, python-format msgid "Increase diff context to %(num)s lines" -msgstr "augmenter le contexte du diff à %(num)s lignes" +msgstr "Augmenter le contexte du diff à %(num)s lignes" #: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 #: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 @@ -299,8 +299,7 @@ msgid "Journal" msgstr "Historique" -#: kallithea/controllers/login.py:150 kallithea/controllers/login.py:196 -#| msgid "bad captcha" +#: kallithea/controllers/login.py:151 kallithea/controllers/login.py:197 msgid "Bad captcha" msgstr "Mauvais captcha" @@ -309,16 +308,15 @@ msgstr "Vous vous êtes inscrits avec succès à Kallithea" #: kallithea/controllers/login.py:202 -#, fuzzy #| msgid "Your password reset link was sent" msgid "A password reset confirmation code has been sent" -msgstr "Un lien de rénitialisation de votre mot de passe vous a été envoyé" +msgstr "" +"Un lien de confirmation de réinitialisation de mot de passe a été envoyé" #: kallithea/controllers/login.py:251 -#, fuzzy #| msgid "Password reset link" msgid "Invalid password reset token" -msgstr "Lien de remise à zéro du mot de passe" +msgstr "Clé de réinitialisation de mot de passe invalide" #: kallithea/controllers/login.py:256 #: kallithea/controllers/admin/my_account.py:167 @@ -438,7 +436,7 @@ #: kallithea/controllers/pullrequests.py:617 msgid "No changesets found for updating this pull request." -msgstr "Pas de changeset trouvé pour ce pull request" +msgstr "Pas de changeset trouvé pour ce pull request." #: kallithea/controllers/pullrequests.py:625 #, python-format @@ -451,7 +449,7 @@ #: kallithea/controllers/pullrequests.py:722 msgid "No permission to change pull request status" -msgstr "" +msgstr "Permission manquante pour changer le statut du pull request" #: kallithea/controllers/pullrequests.py:727 msgid "Closing." @@ -502,9 +500,8 @@ #: kallithea/controllers/admin/gists.py:59 #: kallithea/controllers/admin/my_account.py:243 #: kallithea/controllers/admin/users.py:285 -#, fuzzy msgid "Forever" -msgstr "pour toujours" +msgstr "Pour toujours" #: kallithea/controllers/admin/gists.py:60 #: kallithea/controllers/admin/my_account.py:244 @@ -546,9 +543,8 @@ msgstr "Gist %s supprimé" #: kallithea/controllers/admin/gists.py:233 -#, fuzzy msgid "Unmodified" -msgstr "non modifié" +msgstr "Non modifié" #: kallithea/controllers/admin/gists.py:262 msgid "Successfully updated gist content" @@ -832,9 +828,9 @@ msgstr "Dépôt %s supprimé" #: kallithea/controllers/admin/repos.py:321 -#, fuzzy, python-format +#, python-format msgid "Cannot delete repository %s which still has forks" -msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés" +msgstr "Impossible de supprimer le dépôt %s : des forks y sont attachés" #: kallithea/controllers/admin/repos.py:326 #, python-format @@ -882,15 +878,13 @@ #: kallithea/controllers/admin/repos.py:537 #: kallithea/controllers/admin/repos.py:564 -#, fuzzy msgid "Repository has been locked" -msgstr "Ce dépôt n’est pas verrouillé" +msgstr "Ce dépôt a été verrouillé" #: kallithea/controllers/admin/repos.py:540 #: kallithea/controllers/admin/repos.py:561 -#, fuzzy msgid "Repository has been unlocked" -msgstr "Ce dépôt n’est pas verrouillé" +msgstr "Ce dépôt a été déverrouillé" #: kallithea/controllers/admin/repos.py:543 #: kallithea/controllers/admin/repos.py:568 @@ -1049,7 +1043,7 @@ #: kallithea/controllers/admin/users.py:236 msgid "The default user cannot be edited" -msgstr "" +msgstr "L'utilisateur par défaut ne peut pas être modifié" #: kallithea/controllers/admin/users.py:463 #, python-format @@ -1070,9 +1064,8 @@ msgstr "IP %s non autorisée" #: kallithea/lib/auth.py:756 -#, fuzzy msgid "Invalid API key" -msgstr "Nouvelle clé d'API" +msgstr "Clé d'API invalide" #: kallithea/lib/auth.py:812 msgid "You need to be a registered user to perform this action" @@ -1084,7 +1077,7 @@ #: kallithea/lib/base.py:490 msgid "Repository not found in the filesystem" -msgstr "" +msgstr "Dépôt non trouvé sur le système de fichiers" #: kallithea/lib/base.py:516 kallithea/lib/helpers.py:622 msgid "Changeset not found" @@ -1120,9 +1113,8 @@ msgstr "Afficher les changements combinés %s->%s" #: kallithea/lib/helpers.py:677 -#, fuzzy msgid "Compare view" -msgstr "vue de comparaison" +msgstr "Vue de comparaison" #: kallithea/lib/helpers.py:696 msgid "and" @@ -1138,14 +1130,14 @@ msgstr "révisions" #: kallithea/lib/helpers.py:722 -#, fuzzy, python-format +#, python-format msgid "Fork name %s" -msgstr "nom du fork %s" +msgstr "Nom du fork %s" #: kallithea/lib/helpers.py:742 -#, fuzzy, python-format +#, python-format msgid "Pull request %s" -msgstr "Requête de pull #%s" +msgstr "Requête de pull %s" #: kallithea/lib/helpers.py:752 msgid "[deleted] repository" @@ -1236,7 +1228,7 @@ #: kallithea/templates/compare/compare_diff.html:65 #: kallithea/templates/pullrequests/pullrequest_show.html:326 msgid "No files" -msgstr "" +msgstr "Aucun fichier" #: kallithea/lib/helpers.py:1194 msgid "new file" @@ -1781,111 +1773,113 @@ #: kallithea/model/db.py:1667 msgid "Default user has no access to new repositories" -msgstr "" +msgstr "L'utilisateur par défaut n'a pas accès aux nouveaux dépôts" #: kallithea/model/db.py:1668 -#, fuzzy msgid "Default user has read access to new repositories" -msgstr "Accès interdit à cette ressource" +msgstr "L'utilisateur par défaut a un accès en lecture aux nouveaux dépôts" #: kallithea/model/db.py:1669 -#, fuzzy msgid "Default user has write access to new repositories" -msgstr "Accès interdit à cette ressource" +msgstr "L'utilisateur par défaut a un accès en écriture aux nouveaux dépôts" #: kallithea/model/db.py:1670 msgid "Default user has admin access to new repositories" -msgstr "" +msgstr "L'utilisateur par défaut a un accès administrateur aux nouveaux dépôts" #: kallithea/model/db.py:1672 msgid "Default user has no access to new repository groups" -msgstr "" +msgstr "L'utilisateur par défaut n'a pas accès aux nouveaux groupes de dépôts" #: kallithea/model/db.py:1673 msgid "Default user has read access to new repository groups" msgstr "" +"L'utilisateur par défaut a accès en lecture seule aux nouveaux groupes de " +"dépôts" #: kallithea/model/db.py:1674 msgid "Default user has write access to new repository groups" msgstr "" +"L'utilisateur par défaut a accès en écriture aux nouveaux groupes de dépôts" #: kallithea/model/db.py:1675 msgid "Default user has admin access to new repository groups" msgstr "" +"L'utilisateur par défaut a accès administrateur aux nouveaux groupes de " +"dépôts" #: kallithea/model/db.py:1677 msgid "Default user has no access to new user groups" msgstr "" +"L'utilisateur par défaut n'a pas accès aux nouveaux groupes d'utilisateurs" #: kallithea/model/db.py:1678 msgid "Default user has read access to new user groups" msgstr "" +"L'utilisateur par défaut a accès en lecture seule aux nouveaux groupes " +"d'utilisateurs" #: kallithea/model/db.py:1679 msgid "Default user has write access to new user groups" msgstr "" +"L'utilisateur par défaut a accès en écriture aux nouveaux groupes " +"d'utilisateurs" #: kallithea/model/db.py:1680 msgid "Default user has admin access to new user groups" msgstr "" +"L'utilisateur par défaut a un accès administrateur aux nouveaux groupes " +"d'utilisateurs" #: kallithea/model/db.py:1682 -#, fuzzy msgid "Only admins can create repository groups" -msgstr "Groupe de dépôts %s créé" +msgstr "Seul un administrateur peut créer un groupe de dépôts" #: kallithea/model/db.py:1683 -#, fuzzy msgid "Non-admins can create repository groups" -msgstr "Groupe de dépôts %s créé" +msgstr "" +"Les utilisateurs non-administrateurs peuvent créer des groupes de dépôts" #: kallithea/model/db.py:1685 -#, fuzzy msgid "Only admins can create user groups" -msgstr "[créé] groupe d'utilisateurs" +msgstr "Seul un administrateur peut créer des groupes d'utilisateurs" #: kallithea/model/db.py:1686 -#, fuzzy msgid "Non-admins can create user groups" -msgstr "[créé] groupe d'utilisateurs" +msgstr "" +"Les utilisateurs non-administrateurs peuvent créer des groupes d'utilisateurs" #: kallithea/model/db.py:1688 -#, fuzzy msgid "Only admins can create top level repositories" -msgstr "Dépôts de niveau supérieur" +msgstr "Seul un administrateur peut créer des dépôts de niveau supérieur" #: kallithea/model/db.py:1689 -#, fuzzy msgid "Non-admins can create top level repositories" -msgstr "Dépôts de niveau supérieur" +msgstr "" +"Les utilisateurs non-administrateurs peuvent créer des dépôts de niveau " +"supérieur" #: kallithea/model/db.py:1694 -#, fuzzy msgid "Only admins can fork repositories" -msgstr "Dépôts totaux" +msgstr "Seul un administrateur peut faire un fork de dépôt" #: kallithea/model/db.py:1695 -#, fuzzy msgid "Non-admins can can fork repositories" -msgstr "Invalider le cache pour tous les dépôts" +msgstr "Les utilisateurs non-administrateurs peuvent faire un fork de dépôt" #: kallithea/model/db.py:1698 -#, fuzzy msgid "User registration with manual account activation" msgstr "Enregistrement des utilisateurs avec activation de compte manuelle" #: kallithea/model/db.py:1699 -#, fuzzy msgid "User registration with automatic account activation" msgstr "Enregistrement des utilisateurs avec activation de compte automatique" #: kallithea/model/db.py:2228 -#, fuzzy msgid "Not reviewed" msgstr "Pas encore relue" #: kallithea/model/db.py:2231 -#, fuzzy msgid "Under review" msgstr "En cours de relecture" @@ -1912,34 +1906,34 @@ msgstr "Le nom ne doit pas contenir seulement des chiffres" #: kallithea/model/notification.py:254 -#, fuzzy, python-format +#, python-format msgid "%(user)s commented on changeset %(age)s" -msgstr "%(user)s a commenté sur le changeset à %(when)s" +msgstr "%(user)s a commenté sur le changeset %(age)s" #: kallithea/model/notification.py:255 -#, fuzzy, python-format +#, python-format msgid "%(user)s sent message %(age)s" -msgstr "%(user)s a envoyé un message à %(when)s" +msgstr "%(user)s a envoyé un message %(age)s" #: kallithea/model/notification.py:256 -#, fuzzy, python-format +#, python-format msgid "%(user)s mentioned you %(age)s" -msgstr "%(user)s vous a mentionné à %(when)s" +msgstr "%(user)s vous a mentionné %(age)s" #: kallithea/model/notification.py:257 -#, fuzzy, python-format +#, python-format msgid "%(user)s registered in Kallithea %(age)s" -msgstr "%(user)s s'est enregistré sur Kallithea à %(when)s" +msgstr "%(user)s s'est enregistré sur Kallithea %(age)s" #: kallithea/model/notification.py:258 -#, fuzzy, python-format +#, python-format msgid "%(user)s opened new pull request %(age)s" -msgstr "%(user)s a ouvert une nouvelle demande de pull à %(when)s" +msgstr "%(user)s a ouvert une nouvelle demande de pull %(age)s" #: kallithea/model/notification.py:259 -#, fuzzy, python-format +#, python-format msgid "%(user)s commented on pull request %(age)s" -msgstr "%(user)s a commenté la demande de pull à %(when)s" +msgstr "%(user)s a commenté la demande de pull %(age)s" #: kallithea/model/notification.py:266 #, python-format @@ -1974,7 +1968,7 @@ #: kallithea/model/notification.py:302 #, python-format msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" +msgstr "[Commentaire] Changeset %(short_id)s de %(repo_name)s dans %(branch)s" #: kallithea/model/notification.py:305 #, python-format @@ -1982,29 +1976,30 @@ msgstr "Nouvel utilisateur %(new_username)s enregistré" #: kallithea/model/notification.py:307 -#, fuzzy, python-format -#| msgid "%(user)s wants you to review pull request %(pr_nice_id)s: -#| %(pr_title)s" +#, python-format +#| msgid "%(user)s wants you to review pull request %(pr_nice_id)s:" msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" msgstr "" -"%(user)s veut que vous regardiez la demande de pull #%(pr_id)s : " -"%(pr_title)s" +"[Ajouté] Demande de pull %(pr_nice_id)s à partir de %(ref)s pour " +"%(repo_name)s" #: kallithea/model/notification.py:308 -#, fuzzy, python-format +#, python-format #| msgid "[commented] on pull request for" msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[a commenté] la requête de pull pour" +msgstr "" +"[Commentaire] Demande de pull %(pr_nice_id)s à partir de %(ref)s pour " +"%(repo_name)s" #: kallithea/model/notification.py:321 msgid "Closing" msgstr "Fermeture" #: kallithea/model/pull_request.py:137 -#, fuzzy, python-format +#, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -"%(user)s veut que vous regardiez la demande de pull #%(pr_id)s : " +"%(user)s veut que vous regardiez la demande de pull %(pr_nice_id)s : " "%(pr_title)s" #: kallithea/model/scm.py:812 @@ -2016,11 +2011,10 @@ msgstr "Nouveau enregistrement d'utilisateur" #: kallithea/model/user.py:256 -#, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le " -"bon fonctionnement de l’application" +"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le bon " +"fonctionnement de l’application" #: kallithea/model/user.py:261 #, python-format @@ -2041,23 +2035,23 @@ "supprimé. Changez les propriétaires ou supprimez ces dépôts : %s" #: kallithea/model/user.py:273 -#, fuzzy, python-format +#, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %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" +"L’utilisateur « %s » possède %s groupes d'utilisateurs et ne peut pas être " +"supprimé. Changez les propriétaires de ces groupes d'utilisateurs ou " +"supprimez-les : %s" #: kallithea/model/user.py:360 msgid "Password reset link" msgstr "Lien de remise à zéro du mot de passe" #: kallithea/model/user.py:408 -#, fuzzy #| msgid "Password reset link" msgid "Password reset notification" -msgstr "Lien de remise à zéro du mot de passe" +msgstr "Notification de réinitialisation du mot de passe" #: kallithea/model/user.py:409 #, python-format @@ -2065,6 +2059,8 @@ "The password to your account %s has been changed using password reset " "form." msgstr "" +"Le mot de passe de votre compte %s a été changé via le formulaire de " +"réinitialisation du mot de passe." #: kallithea/model/validators.py:77 kallithea/model/validators.py:78 msgid "Value cannot be an empty list" @@ -2076,22 +2072,18 @@ msgstr "Le nom d’utilisateur « %(username)s » existe déjà" #: kallithea/model/validators.py:97 -#, fuzzy, python-format +#, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "Le nom d’utilisateur « %(username)s » n’est pas valide" #: kallithea/model/validators.py:99 -#, fuzzy -#| msgid "" "Username may only contain alphanumeric characters underscores, -#| periods or" " dashes and must begin with alphanumeric character or -#| underscore" msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -"Le pseudonyme ne peut contenir que des caractères alphanumériques, des " -"tirets, points, traits d'union et doit commencer avec un caractère " -"alphanumérique ou un trait d'union" +"Le nom d'utilisateur ne peut contenir que des caractères alphanumériques, " +"des underscores (_), points, traits d'union et doit commencer avec un " +"caractère alphanumérique ou un underscore" #: kallithea/model/validators.py:126 msgid "The input is not valid" @@ -2147,16 +2139,15 @@ msgstr "Les mots de passe ne correspondent pas" #: kallithea/model/validators.py:300 -#, fuzzy msgid "Invalid username or password" -msgstr "mot de passe invalide" +msgstr "Nom d'utilisateur ou mot de passe invalide" #: kallithea/model/validators.py:331 msgid "Token mismatch" msgstr "Jeton d’authentification incorrect" #: kallithea/model/validators.py:345 -#, fuzzy, python-format +#, python-format msgid "Repository name %(repo)s is not allowed" msgstr "Le nom de dépôt « %(repo)s » n’est pas autorisé" @@ -2176,15 +2167,16 @@ msgstr "Un groupe de dépôts avec le nom « %(repo)s » existe déjà" #: kallithea/model/validators.py:465 -#, fuzzy msgid "Invalid repository URL" -msgstr "Dépôt privé" +msgstr "URL de dépôt invalide" #: kallithea/model/validators.py:466 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" +"URL de dépôt invalide. Ce doit être une URL valide de type http, https, ssh, " +"svn+http ou svn+https" #: kallithea/model/validators.py:489 msgid "Fork has to be the same type as parent" @@ -2211,14 +2203,13 @@ msgstr "Ceci n’est pas un chemin valide" #: kallithea/model/validators.py:705 -#, fuzzy msgid "This email address is already in use" msgstr "Cette adresse e-mail est déjà enregistrée" #: kallithea/model/validators.py:725 -#, fuzzy, python-format +#, python-format msgid "Email address \"%(email)s\" not found" -msgstr "L’adresse e-mail « %(email)s » n’existe pas." +msgstr "L’adresse e-mail « %(email)s » n’existe pas" #: kallithea/model/validators.py:762 msgid "" @@ -2507,46 +2498,45 @@ msgstr "Envoyer l'E-mail de réinitialisation du mot de passe" #: kallithea/templates/password_reset.html:47 -#, fuzzy -#| msgid "" "Password reset link will be sent to the email address matching -#| your " "username." +#| msgid "" " msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "" -"Le lien de réinitialisation du mot de passe sera envoyé à l'adresse " -"e-mail correspondant à votre nom d'utilisateur." +"Un lien de réinitialisation du mot de passe sera envoyé à l'adresse e-mail " +"indiquée si elle est enregistrée dans le système." #: kallithea/templates/password_reset_confirmation.html:19 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" +"Vous êtes sur le point de changer le mot de passe pour l'adresse e-mail %s." #: kallithea/templates/password_reset_confirmation.html:20 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" +"Vous devez utiliser la même session de navigateur pour cette opération que " +"celle utilisée pour la demande de réinitialisation de mot de passe." #: kallithea/templates/password_reset_confirmation.html:30 msgid "Code you received in the email" -msgstr "" +msgstr "Le code que vous avez reçu dans l'e-mail" #: kallithea/templates/password_reset_confirmation.html:39 -#, fuzzy #| msgid "New password" msgid "New Password" msgstr "Nouveau mot de passe" #: kallithea/templates/password_reset_confirmation.html:48 -#, fuzzy #| msgid "Confirm new password" msgid "Confirm New Password" msgstr "Confirmer le nouveau mot de passe" #: kallithea/templates/password_reset_confirmation.html:56 msgid "Confirm" -msgstr "" +msgstr "Confirmation" #: kallithea/templates/register.html:5 kallithea/templates/register.html:14 #: kallithea/templates/register.html:90 @@ -2589,10 +2579,12 @@ #: kallithea/templates/register.html:92 msgid "Registered accounts are ready to use and need no further action." msgstr "" +"Les comptes enregistrés sont prêts à être utilisés, et ne nécessitent aucune " +"autre action." #: kallithea/templates/register.html:94 msgid "Please wait for an administrator to activate your account." -msgstr "" +msgstr "Merci d'attendre qu'un administrateur active votre compte." #: kallithea/templates/switch_to_list.html:10 #: kallithea/templates/branches/branches_data.html:69 @@ -2690,16 +2682,12 @@ msgstr "Greffons activés" #: kallithea/templates/admin/auth/auth_settings.html:33 -#, fuzzy -#| msgid "" "Comma separated list of plugins. Order of plugins is also order in -#| which " "Kallithea will try to authenticate user" msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -"Une liste séparée avec des virgules des greffons. L'ordre des greffons " -"est aussi celui dans lequel Kallithea va essayer d'authentifier un " -"utilisateur" +"Une liste séparée avec des virgules des greffons. L'ordre des greffons est " +"aussi celui dans lequel Kallithea va essayer d'authentifier un utilisateur" #: kallithea/templates/admin/auth/auth_settings.html:34 msgid "Available built-in plugins" @@ -2836,9 +2824,8 @@ #: kallithea/templates/admin/my_account/my_account_api_keys.html:27 #: kallithea/templates/admin/users/user_edit_api_keys.html:8 #: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#, fuzzy msgid "Never" -msgstr "jamais" +msgstr "Jamais" #: kallithea/templates/admin/gists/edit.html:145 msgid "Update Gist" @@ -3020,9 +3007,8 @@ msgstr "Profil" #: kallithea/templates/admin/my_account/my_account.html:36 -#, fuzzy msgid "Email Addresses" -msgstr "Nouvelle adrese" +msgstr "Adresses e-mail" #: kallithea/templates/admin/my_account/my_account.html:38 #: kallithea/templates/admin/users/user_edit.html:31 @@ -3030,23 +3016,20 @@ msgstr "Clés de l'API" #: kallithea/templates/admin/my_account/my_account.html:39 -#, fuzzy msgid "Owned Repositories" -msgstr "Dépôts" +msgstr "Dépôts possédés" #: kallithea/templates/admin/my_account/my_account.html:40 #: kallithea/templates/journal/journal.html:53 -#, fuzzy msgid "Watched Repositories" -msgstr "Création de dépôts" +msgstr "Dépôts surveillés" #: kallithea/templates/admin/my_account/my_account.html:41 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 -#, fuzzy msgid "Show Permissions" -msgstr "Copier les permissions" +msgstr "Afficher les permissions" #: kallithea/templates/admin/my_account/my_account_api_keys.html:6 #: kallithea/templates/admin/users/user_edit_api_keys.html:6 @@ -3055,37 +3038,33 @@ #: kallithea/templates/admin/my_account/my_account_api_keys.html:14 #: kallithea/templates/admin/users/user_edit_api_keys.html:14 -#, fuzzy, python-format +#, python-format msgid "Confirm to reset this API key: %s" msgstr "Confirmer la remise à zéro de cette clé d'API : %s" #: kallithea/templates/admin/my_account/my_account_api_keys.html:30 #: kallithea/templates/admin/users/user_edit_api_keys.html:30 -#, fuzzy msgid "Expired" msgstr "a expiré" #: kallithea/templates/admin/my_account/my_account_api_keys.html:40 #: kallithea/templates/admin/users/user_edit_api_keys.html:40 -#, fuzzy, python-format +#, python-format msgid "Confirm to remove this API key: %s" msgstr "Confirmer la suppression de cette clé d'API : %s" #: kallithea/templates/admin/my_account/my_account_api_keys.html:42 #: kallithea/templates/admin/users/user_edit_api_keys.html:42 -#, fuzzy msgid "Remove" -msgstr "supprimer" +msgstr "Supprimer" #: kallithea/templates/admin/my_account/my_account_api_keys.html:49 #: kallithea/templates/admin/users/user_edit_api_keys.html:49 -#, fuzzy msgid "No additional API keys specified" msgstr "Pas de clés d'API supplémentaires spécifiées" #: kallithea/templates/admin/my_account/my_account_api_keys.html:61 #: kallithea/templates/admin/users/user_edit_api_keys.html:61 -#, fuzzy msgid "New API key" msgstr "Nouvelle clé d'API" @@ -3142,6 +3121,7 @@ #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" +"Ce compte est géré avec %s et le mot de passe ne peut pas être changé ici" #: kallithea/templates/admin/my_account/my_account_profile.html:11 msgid "Change your avatar at" @@ -3163,9 +3143,8 @@ #: kallithea/templates/admin/my_account/my_account_profile.html:16 #: kallithea/templates/admin/users/user_edit_profile.html:15 -#, fuzzy msgid "Current IP" -msgstr "adresse IP actuelle" +msgstr "Adresse IP actuelle" #: kallithea/templates/admin/my_account/my_account_repos.html:1 msgid "Repositories You Own" @@ -3225,7 +3204,6 @@ #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 #: kallithea/templates/base/base.html:64 -#, fuzzy msgid "Default Permissions" msgstr "Permissions par défaut" @@ -3244,13 +3222,13 @@ msgstr "Accès anonyme" #: kallithea/templates/admin/permissions/permissions_globals.html:13 -#, fuzzy, python-format +#, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" "Autoriser l'accès à Kallithea sans le besoin de se connecter. Les " -"utilisateurs anonymes ont les permissions de %s" +"utilisateurs anonymes ont les permissions de l'utilisateur %s." #: kallithea/templates/admin/permissions/permissions_globals.html:25 msgid "" @@ -3258,15 +3236,17 @@ "permission, note that all custom default permission on repositories will " "be lost" msgstr "" +"Toutes les permissions par défaut de chaque dépôt vont être réinitialisées " +"aux valeurs choisies. Notez que toutes les permissions par défaut " +"personnalisées sur les dépôts seront perdues" #: kallithea/templates/admin/permissions/permissions_globals.html:26 -#, fuzzy msgid "Apply to all existing repositories" -msgstr "Importer un dépôt existant ?" +msgstr "Appliquer à tous les dépôts existants" #: kallithea/templates/admin/permissions/permissions_globals.html:27 msgid "Permissions for the Default user on new repositories." -msgstr "" +msgstr "Permissions pour l'utilisateur par défaut sur les nouveaux dépôts." #: kallithea/templates/admin/permissions/permissions_globals.html:32 #: kallithea/templates/admin/repos/repo_add_base.html:37 @@ -3282,15 +3262,18 @@ "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" +"Toutes les permissions par défaut de chaque groupe de dépôts vont être " +"réinitialisées aux valeurs choisies. Notez que toutes les permissions par " +"défaut personnalisées sur les groupes de dépôts seront perdues" #: kallithea/templates/admin/permissions/permissions_globals.html:40 -#, fuzzy msgid "Apply to all existing repository groups" -msgstr "Importer un dépôt existant ?" +msgstr "Appliquer à tous les groupes de dépôts existants" #: kallithea/templates/admin/permissions/permissions_globals.html:41 msgid "Permissions for the Default user on new repository groups." msgstr "" +"Permissions pour l'utilisateur par défaut sur les nouveaux groupes de dépôts." #: kallithea/templates/admin/permissions/permissions_globals.html:46 #: kallithea/templates/data_table/_dt_elements.html:209 @@ -3303,29 +3286,38 @@ "permission, note that all custom default permission on user groups will " "be lost" msgstr "" +"Toutes les permissions par défaut de chaque groupe d'utilisateurs vont être " +"réinitialisées aux valeurs choisies. Notez que toutes les permissions par " +"défaut personnalisées sur les groupes d'utilisateurs seront perdues" #: kallithea/templates/admin/permissions/permissions_globals.html:54 msgid "Apply to all existing user groups" -msgstr "" +msgstr "Appliquer à tous les groupes d'utilisateurs existants" #: kallithea/templates/admin/permissions/permissions_globals.html:55 msgid "Permissions for the Default user on new user groups." msgstr "" +"Permissions pour l'utilisateur par défaut sur les nouveaux groupes " +"d'utilisateurs." #: kallithea/templates/admin/permissions/permissions_globals.html:60 -#, fuzzy msgid "Top level repository creation" -msgstr "Création de dépôt" +msgstr "Création de dépôt de niveau supérieur" #: kallithea/templates/admin/permissions/permissions_globals.html:64 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" +"Activer pour autoriser les non-administrateurs à créer des dépôts au niveau " +"supérieur." #: kallithea/templates/admin/permissions/permissions_globals.html:65 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" +"Note : Cela autorisera également tous les utilisateurs à utiliser l'API pour " +"créer des dépôts partout. Ce comportement peut changer dans des versions " +"futures." #: kallithea/templates/admin/permissions/permissions_globals.html:70 msgid "Repository creation with group write access" @@ -3337,6 +3329,9 @@ "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" +"Avec ceci, le droit d'écriture dans un groupe de dépôt donne le droit de " +"créer des dépôts dans ce groupe. Sans ceci, le droit d'écriture pour les " +"groupes n'a pas d'impact." #: kallithea/templates/admin/permissions/permissions_globals.html:79 msgid "User group creation" @@ -3345,6 +3340,8 @@ #: kallithea/templates/admin/permissions/permissions_globals.html:83 msgid "Enable this to allow non-admins to create user groups." msgstr "" +"Activer pour autoriser les non-administrateurs à créer des groupes " +"d'utilisateurs." #: kallithea/templates/admin/permissions/permissions_globals.html:88 msgid "Repository forking" @@ -3353,6 +3350,7 @@ #: kallithea/templates/admin/permissions/permissions_globals.html:92 msgid "Enable this to allow non-admins to fork repositories." msgstr "" +"Activer pour autoriser les non-administrateurs à faire des fork de dépôt." #: kallithea/templates/admin/permissions/permissions_globals.html:97 msgid "Registration" @@ -3360,19 +3358,18 @@ #: kallithea/templates/admin/permissions/permissions_globals.html:105 msgid "External auth account activation" -msgstr "" +msgstr "Activation de l'authentification externe" #: kallithea/templates/admin/permissions/permissions_ips.html:13 #: kallithea/templates/admin/users/user_edit_ips.html:23 -#, fuzzy, python-format +#, python-format msgid "Confirm to delete this IP address: %s" msgstr "Confirmer la suppression de cette adresse IP : %s" #: kallithea/templates/admin/permissions/permissions_ips.html:19 #: kallithea/templates/admin/users/user_edit_ips.html:30 -#, fuzzy msgid "All IP addresses are allowed." -msgstr "Toutes les adresses IP sont autorisées" +msgstr "Toutes les adresses IP sont autorisées." #: kallithea/templates/admin/permissions/permissions_ips.html:30 #: kallithea/templates/admin/users/user_edit_ips.html:42 @@ -3407,12 +3404,12 @@ #: kallithea/templates/admin/repo_groups/repo_group_add.html:64 #: kallithea/templates/admin/repos/repo_add_base.html:50 msgid "Copy permission set from parent repository group." -msgstr "" +msgstr "Copier les permissions à partir du groupe de dépôts parent." #: kallithea/templates/admin/repo_groups/repo_group_edit.html:5 -#, fuzzy, python-format +#, python-format msgid "%s Repository Group Settings" -msgstr "Réglages du groupe de dépôts %s" +msgstr "Options du groupe de dépôts %s" #: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 msgid "Add Child Group" @@ -3481,9 +3478,8 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 #: kallithea/templates/admin/repos/repo_edit_permissions.html:12 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 -#, fuzzy msgid "User/User Group" -msgstr "utilisateur/groupe d'utilisateurs" +msgstr "Utilisateur/groupe d'utilisateurs" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 @@ -3491,9 +3487,8 @@ #: kallithea/templates/admin/repos/repo_edit_permissions.html:37 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 -#, fuzzy msgid "Default" -msgstr "[Par défaut]" +msgstr "Par défaut" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 @@ -3501,7 +3496,6 @@ #: kallithea/templates/admin/repos/repo_edit_permissions.html:68 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 -#, fuzzy msgid "Revoke" msgstr "Révoquer" @@ -3512,7 +3506,6 @@ msgstr "Ajouter un nouveau" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 -#, fuzzy msgid "Apply to children" msgstr "Appliquer aux enfants" @@ -3525,6 +3518,8 @@ "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" +"Ajouter ou révoquer la permission pour tous les enfants de ce groupe, y " +"compris les dépôts non-privés et les autres groupes si sélectionné." #: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 msgid "" @@ -3536,12 +3531,11 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 msgid "Remove this group" -msgstr "" +msgstr "Supprimer ce groupe" #: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 -#, fuzzy msgid "Confirm to delete this group" -msgstr "Confirmer la suppression de cette adresse IP : %s" +msgstr "Confirmer la suppression de ce groupe" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 #, python-format @@ -3557,25 +3551,24 @@ msgstr "comprenant" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 -#, fuzzy msgid "Repository Groups Administration" msgstr "Administration des groupes de dépôts" #: kallithea/templates/admin/repo_groups/repo_groups.html:48 -#, fuzzy msgid "Number of Top-level Repositories" -msgstr "Nombre de sous-dépôts" +msgstr "Nombre de dépôts de niveau supérieur" #: kallithea/templates/admin/repos/repo_add_base.html:17 -#, fuzzy msgid "Clone remote repository" -msgstr "[a créé] le dépôt" +msgstr "Cloner le dépôt distant" #: kallithea/templates/admin/repos/repo_add_base.html:22 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" +"Optionnel : URL d'un dépôt distant. Si renseigné, le dépôt sera créé comme " +"un clone à partir de cette URL." #: kallithea/templates/admin/repos/repo_add_base.html:32 #: kallithea/templates/admin/repos/repo_edit_settings.html:69 @@ -3606,11 +3599,14 @@ "Default revision for files page, downloads, full text search index and " "readme generation" msgstr "" +"Révision par défaut pour les pages de fichiers, de téléchargement, de " +"l'index de recherche dans le texte complet, et de génération de " +"documentation (readme)" #: kallithea/templates/admin/repos/repo_creating.html:9 -#, fuzzy, python-format +#, python-format msgid "%s Creating Repository" -msgstr "%s Création du dépôt" +msgstr "Création du dépôt %s" #: kallithea/templates/admin/repos/repo_creating.html:13 msgid "Creating repository" @@ -3622,25 +3618,29 @@ "Repository \"%(repo_name)s\" is being created, you will be redirected " "when this process is finished.repo_name" msgstr "" +"Le dépôt « %(repo_name)s » est en cours de création, vous allez être " +"redirigé quand cette opération sera terminée." #: kallithea/templates/admin/repos/repo_creating.html:39 msgid "" "We're sorry but error occurred during this operation. Please check your " "Kallithea server logs, or contact administrator." msgstr "" +"Désolé, une erreur est survenue pendant l'opération. Vérifiez les journaux " +"du serveur Kallithea, ou contactez votre administrateur." #: kallithea/templates/admin/repos/repo_edit.html:8 -#, fuzzy, python-format +#, python-format msgid "%s Repository Settings" -msgstr "Réglages du groupe de dépôts %s" +msgstr "Réglages du dépôt %s" #: kallithea/templates/admin/repos/repo_edit.html:49 msgid "Extra Fields" -msgstr "" +msgstr "Champs supplémentaires" #: kallithea/templates/admin/repos/repo_edit.html:52 msgid "Caches" -msgstr "" +msgstr "Caches" #: kallithea/templates/admin/repos/repo_edit.html:55 msgid "Remote" @@ -3654,68 +3654,58 @@ msgstr "Statistiques" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 -#, fuzzy msgid "Parent" -msgstr "Parent du groupe" +msgstr "Parent" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 #: kallithea/templates/admin/repos/repo_edit_fork.html:5 msgid "Set" -msgstr "" +msgstr "Appliquer" #: kallithea/templates/admin/repos/repo_edit_advanced.html:8 #: kallithea/templates/admin/repos/repo_edit_fork.html:9 -#, fuzzy msgid "Manually set this repository as a fork of another from the list." -msgstr "Marquer ce dépôt comme fork d’un autre dépôt de la liste" +msgstr "Marquer manuellement ce dépôt comme fork d’un autre dépôt de la liste." #: kallithea/templates/admin/repos/repo_edit_advanced.html:22 -#, fuzzy msgid "Public Journal Visibility" -msgstr "Journal public" +msgstr "Visibilité du journal public" #: kallithea/templates/admin/repos/repo_edit_advanced.html:29 msgid "Remove from public journal" msgstr "Supprimer du journal public" #: kallithea/templates/admin/repos/repo_edit_advanced.html:34 -#, fuzzy msgid "Add to Public Journal" -msgstr "Journal public" +msgstr "Ajouter au journal public" #: kallithea/templates/admin/repos/repo_edit_advanced.html:40 -#, fuzzy msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -"Le descriptif des actions réalisées sur ce dépôt sera visible à tous " -"depuis le journal public" +"Les actions réalisées sur ce dépôt seront visibles à tous depuis le journal " +"public." #: kallithea/templates/admin/repos/repo_edit_advanced.html:46 -#, fuzzy msgid "Change Locking" -msgstr "Activer le verrouillage" +msgstr "Changer le verrouillage" #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -#, fuzzy msgid "Confirm to unlock repository." -msgstr "Veuillez confirmer le déverrouillage de ce dépôt" +msgstr "Veuillez confirmer le déverrouillage de ce dépôt." #: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -#, fuzzy msgid "Unlock Repository" -msgstr "Dépôt non verrouillé" +msgstr "Déverrouiller le dépôt" #: kallithea/templates/admin/repos/repo_edit_advanced.html:60 -#, fuzzy msgid "Confirm to lock repository." -msgstr "Veuillez confirmer le verrouillage de ce dépôt" +msgstr "Veuillez confirmer le verrouillage de ce dépôt." #: kallithea/templates/admin/repos/repo_edit_advanced.html:62 -#, fuzzy msgid "Lock Repository" -msgstr "Dépôt non verrouillé" +msgstr "Verrouiller le dépôt" #: kallithea/templates/admin/repos/repo_edit_advanced.html:64 msgid "Repository is not locked" @@ -3728,6 +3718,10 @@ "pulling locks the repository; only the user who pulled and locked it can " "unlock it by doing a push." msgstr "" +"Forcer le verrouillage du dépôt. Ne fonctionne que lorsque l'accès anonyme " +"est désactivé. Déclencher un pull verrouille le dépôt. L'utilisateur qui " +"fait le pull verrouille le dépôt ; seul l'utilisateur qui a fait le pull et " +"a verrouillé peut déverrouiller en faisant un push." #: kallithea/templates/admin/repos/repo_edit_advanced.html:79 #: kallithea/templates/data_table/_dt_elements.html:130 @@ -3736,24 +3730,23 @@ msgstr "Voulez-vous vraiment supprimer le dépôt %s ?" #: kallithea/templates/admin/repos/repo_edit_advanced.html:81 -#, fuzzy msgid "Delete this Repository" -msgstr "Supprimer ce groupe de dépôts" +msgstr "Supprimer ce dépôt" #: kallithea/templates/admin/repos/repo_edit_advanced.html:84 -#, fuzzy, python-format +#, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Ce dépôt a %s fork" +msgstr[1] "Ce dépôt a %s forks" #: kallithea/templates/admin/repos/repo_edit_advanced.html:85 msgid "Detach forks" -msgstr "" +msgstr "Détacher les forks" #: kallithea/templates/admin/repos/repo_edit_advanced.html:86 msgid "Delete forks" -msgstr "" +msgstr "Supprimer les forks" #: kallithea/templates/admin/repos/repo_edit_advanced.html:90 msgid "" @@ -3761,39 +3754,38 @@ "administrator expires it. The administrator can both permanently delete " "it or restore it." msgstr "" +"Le dépôt supprimé sera mis de côté et caché jusqu'à ce que l'administrateur " +"le fasse expirer. L'administrateur peut soit le supprimer définitivement, " +"soit le restaurer." #: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy msgid "Invalidate Repository Cache" msgstr "Invalider le cache du dépôt" #: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy msgid "Confirm to invalidate repository cache." msgstr "Voulez-vous vraiment invalider le cache du dépôt ?" #: kallithea/templates/admin/repos/repo_edit_caches.html:7 -#, fuzzy msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" -"Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce " -"dépôt, il sera à nouveau mis en cache" +"Invalider manuellement le cache de ce dépôt. Au prochain accès sur ce dépôt, " +"il sera à nouveau mis en cache." #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -#, fuzzy msgid "List of Cached Values" msgstr "Liste des valeurs en cache" #: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" -msgstr "" +msgstr "Préfixe" #: kallithea/templates/admin/repos/repo_edit_caches.html:16 #: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Key" -msgstr "" +msgstr "Clé" #: kallithea/templates/admin/repos/repo_edit_caches.html:17 #: kallithea/templates/admin/user_groups/user_group_add.html:49 @@ -3807,74 +3799,69 @@ #: kallithea/templates/admin/repos/repo_edit_fields.html:5 msgid "Label" -msgstr "" +msgstr "Libellé" #: kallithea/templates/admin/repos/repo_edit_fields.html:19 #, python-format msgid "Confirm to delete this field: %s" -msgstr "" +msgstr "Voulez-vous vraiment supprimer ce champ : %s ?" #: kallithea/templates/admin/repos/repo_edit_fields.html:33 msgid "New field key" -msgstr "" +msgstr "Clé du nouveau champ" #: kallithea/templates/admin/repos/repo_edit_fields.html:41 msgid "New field label" -msgstr "" +msgstr "Libellé du nouveau champ" #: kallithea/templates/admin/repos/repo_edit_fields.html:44 msgid "Enter short label" -msgstr "" +msgstr "Saisir un libellé court" #: kallithea/templates/admin/repos/repo_edit_fields.html:50 msgid "New field description" -msgstr "" +msgstr "Description du nouveau champ" #: kallithea/templates/admin/repos/repo_edit_fields.html:53 msgid "Enter description of a field" -msgstr "" +msgstr "Saisir la description du champ" #: kallithea/templates/admin/repos/repo_edit_fields.html:66 -#, fuzzy msgid "Extra fields are disabled." -msgstr "Les avatars sont désactivés" +msgstr "Les champs supplémentaires sont désactivés." #: kallithea/templates/admin/repos/repo_edit_permissions.html:21 -#, fuzzy msgid "Private Repository" msgstr "Dépôt privé" #: kallithea/templates/admin/repos/repo_edit_remote.html:3 -#, fuzzy msgid "Remote repository URL" -msgstr "Dépôt %s créé" +msgstr "URL du dépôt distant" #: kallithea/templates/admin/repos/repo_edit_remote.html:9 -#, fuzzy msgid "Pull Changes from Remote Repository" -msgstr "[a pullé depuis un site distant] dans le dépôt" +msgstr "Récupérer les modifications depuis le dépôt distant" #: kallithea/templates/admin/repos/repo_edit_remote.html:11 -#, fuzzy msgid "Confirm to pull changes from remote repository." -msgstr "Voulez-vous vraiment récupérer les changements depuis le site distant ?" +msgstr "" +"Voulez-vous vraiment récupérer les changements depuis le dépôt distant ?" #: kallithea/templates/admin/repos/repo_edit_remote.html:17 msgid "This repository does not have a remote repository URL." -msgstr "" +msgstr "Ce dépôt n'a pas d'URL de dépôt distant." #: kallithea/templates/admin/repos/repo_edit_settings.html:11 -#, fuzzy msgid "Permanent Repository ID" -msgstr "Dépôt privé" +msgstr "ID permanent du dépôt" #: kallithea/templates/admin/repos/repo_edit_settings.html:11 msgid "What is that?" -msgstr "" +msgstr "Qu'est-ce que c'est ?" #: kallithea/templates/admin/repos/repo_edit_settings.html:13 msgid "URL by id" -msgstr "" +msgstr "URL par id" #: kallithea/templates/admin/repos/repo_edit_settings.html:14 msgid "" @@ -3885,22 +3872,29 @@ " This is useful for CI systems, or any " "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" +"Si ce dépôt est renommé ou déplacé dans un autre groupe, l'URL du dépôt " +"change.\n" +" L'utilisation de l'URL permanente ci-dessus " +"garantit que ce dépôt sera toujours accessible via cette URL.\n" +" Cela peut être utile pour les systèmes " +"d'intégration continue, ou dans tous les cas où vous devez saisir l'URL « en " +"dur » dans un service tiers." #: kallithea/templates/admin/repos/repo_edit_settings.html:21 -#, fuzzy msgid "Remote repository" -msgstr "[a créé] le dépôt" +msgstr "Dépôt distant" #: kallithea/templates/admin/repos/repo_edit_settings.html:25 -#, fuzzy msgid "Repository URL" -msgstr "Dépôt" +msgstr "URL du dépôt" #: kallithea/templates/admin/repos/repo_edit_settings.html:29 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" +"Optionel : URL d'un dépôt distant. Si renseigné, le dépôt sera pullé à " +"partir de cette URL." #: kallithea/templates/admin/repos/repo_edit_settings.html:48 msgid "Default revision for files page, downloads, whoosh and readme" @@ -3914,24 +3908,21 @@ #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed commits" -msgstr "" +msgstr "Commits traités" #: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" -msgstr "" +msgstr "Avancement" #: kallithea/templates/admin/repos/repo_edit_statistics.html:10 -#, fuzzy msgid "Reset Statistics" msgstr "Remettre les statistiques à zéro" #: kallithea/templates/admin/repos/repo_edit_statistics.html:10 -#, fuzzy msgid "Confirm to remove current statistics." msgstr "Souhaitez-vous vraiment réinitialiser les statistiques de ce dépôt ?" #: kallithea/templates/admin/repos/repos.html:5 -#, fuzzy msgid "Repositories Administration" msgstr "Administration des dépôts" @@ -3940,9 +3931,8 @@ msgstr "État" #: kallithea/templates/admin/settings/settings.html:5 -#, fuzzy msgid "Settings Administration" -msgstr "Administration générale" +msgstr "Administration des options" #: kallithea/templates/admin/settings/settings.html:27 msgid "VCS" @@ -3950,7 +3940,7 @@ #: kallithea/templates/admin/settings/settings.html:28 msgid "Remap and Rescan" -msgstr "" +msgstr "Mapper et scanner" #: kallithea/templates/admin/settings/settings.html:30 msgid "Visual" @@ -3962,7 +3952,6 @@ msgstr "Hooks" #: kallithea/templates/admin/settings/settings.html:33 -#, fuzzy msgid "Full Text Search" msgstr "Recherche dans le texte complet" @@ -3980,7 +3969,7 @@ #: kallithea/templates/admin/settings/settings_global.html:8 msgid "Site branding" -msgstr "" +msgstr "Nom du site" #: kallithea/templates/admin/settings/settings_global.html:12 msgid "Set a custom title for your Kallithea Service." @@ -3988,17 +3977,19 @@ #: kallithea/templates/admin/settings/settings_global.html:18 msgid "HTTP authentication realm" -msgstr "" +msgstr "Domaine d'authentification HTTP (realm)" #: kallithea/templates/admin/settings/settings_global.html:27 msgid "Analytics HTML block" -msgstr "" +msgstr "Bloc HTML pour l'analytique" #: kallithea/templates/admin/settings/settings_global.html:31 msgid "" "HTML with JavaScript for web analytics systems like Google Analytics or " "Piwik. This will be added at the bottom of every page." msgstr "" +"HTML avec du JavaScript pour les systèmes d'analyse Web comme Google " +"Analytics ou Piwik. Ceci sera ajouté en bas de chaque page." #: kallithea/templates/admin/settings/settings_global.html:37 msgid "ReCaptcha public key" @@ -4013,33 +4004,33 @@ msgstr "Clé privée ReCaptcha" #: kallithea/templates/admin/settings/settings_global.html:51 -#, fuzzy msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" "Clé privée pour le système reCaptcha. Définir cette valeur activera le " -"captcha d'enregistrement" +"captcha à l'enregistrement." #: kallithea/templates/admin/settings/settings_global.html:56 #: kallithea/templates/admin/settings/settings_vcs.html:80 #: kallithea/templates/admin/settings/settings_visual.html:116 -#, fuzzy msgid "Save Settings" -msgstr "Enregister les options" +msgstr "Enregistrer les options" #: kallithea/templates/admin/settings/settings_hooks.html:1 msgid "Built-in Mercurial Hooks (Read-Only)" -msgstr "" +msgstr "Hooks Mercurial intégrés (lecture seule)" #: kallithea/templates/admin/settings/settings_hooks.html:15 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" +"Les hooks peuvent être utilisés pour déclencher des actions lors de certains " +"évènements comme le push et le pull. Ils peuvent déclencher des fonctions " +"Python ou des applications externes." #: kallithea/templates/admin/settings/settings_hooks.html:19 -#, fuzzy msgid "Custom Hooks" msgstr "Hooks personnalisés" @@ -4049,40 +4040,45 @@ #: kallithea/templates/admin/settings/settings_mapping.html:6 msgid "Rescan option" -msgstr "" +msgstr "Option de scan" #: kallithea/templates/admin/settings/settings_mapping.html:11 msgid "Delete records of missing repositories" -msgstr "" +msgstr "Supprimer les enregistrements de dépôts manquants" #: kallithea/templates/admin/settings/settings_mapping.html:13 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" +"Cocher cette option pour supprimer tous les commentaires, les requêtes de " +"pull et d'autres informations liées aux dépôts qui n'existent plus sur le " +"système de fichiers." #: kallithea/templates/admin/settings/settings_mapping.html:17 msgid "Invalidate cache for all repositories" msgstr "Invalider le cache pour tous les dépôts" #: kallithea/templates/admin/settings/settings_mapping.html:19 -#, fuzzy msgid "Check this to reload data and clear cache keys for all repositories." -msgstr "Invalider le cache pour tous les dépôts" +msgstr "" +"Cocher pour recharger les données et vider le cache pour tous les dépôts." #: kallithea/templates/admin/settings/settings_mapping.html:23 msgid "Install Git hooks" -msgstr "" +msgstr "Installer des hooks Git" #: kallithea/templates/admin/settings/settings_mapping.html:25 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" +"Vérifier si les hooks Git de Kallithea sont installés pour chaque dépôt. Les " +"hooks actuels seront mis à jour vers la dernière version." #: kallithea/templates/admin/settings/settings_mapping.html:28 msgid "Overwrite existing Git hooks" -msgstr "" +msgstr "Écraser les hooks Git existants" #: kallithea/templates/admin/settings/settings_mapping.html:30 msgid "" @@ -4090,14 +4086,17 @@ "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" +"Lors de l'installation des hooks Git, écraser tous les hooks existants, même " +"s'ils ne semblent pas provenir de Kallithea. ATTENTION : cette opération " +"détruira tous les hooks Git que vous avez déployés à la main !" #: kallithea/templates/admin/settings/settings_mapping.html:35 msgid "Rescan Repositories" -msgstr "" +msgstr "Relancer le scan des dépôts" #: kallithea/templates/admin/settings/settings_search.html:7 msgid "Index build option" -msgstr "" +msgstr "Option de construction de l'index" #: kallithea/templates/admin/settings/settings_search.html:12 msgid "Build from scratch" @@ -4108,6 +4107,8 @@ "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" +"Cette option ré-indexe complètement tous les dépôts pour pouvoir faire des " +"recherches dans le texte complet." #: kallithea/templates/admin/settings/settings_search.html:21 msgid "Reindex" @@ -4118,13 +4119,12 @@ msgstr "Version de Kallithea" #: kallithea/templates/admin/settings/settings_system.html:4 -#, fuzzy msgid "Check for updates" -msgstr "vérifier les mises à jour" +msgstr "Vérifier les mises à jour" #: kallithea/templates/admin/settings/settings_system.html:5 msgid "Kallithea configuration file" -msgstr "" +msgstr "Fichier de configuration de Kallithea" #: kallithea/templates/admin/settings/settings_system.html:6 msgid "Python version" @@ -4135,21 +4135,18 @@ msgstr "Plateforme" #: kallithea/templates/admin/settings/settings_system.html:8 -#, fuzzy msgid "Git version" msgstr "Version de Git" #: kallithea/templates/admin/settings/settings_system.html:9 -#, fuzzy msgid "Git path" msgstr "Chemin de Git" #: kallithea/templates/admin/settings/settings_system.html:10 msgid "Upgrade info endpoint" -msgstr "" +msgstr "Point d'accès aux informations de mise à jour" #: kallithea/templates/admin/settings/settings_system.html:10 -#, fuzzy msgid "Note: please make sure this server can access this URL" msgstr "Note : vérifiez que le serveur peut accéder cette URL" @@ -4158,7 +4155,6 @@ msgstr "Vérification des mises à jour…" #: kallithea/templates/admin/settings/settings_system.html:23 -#, fuzzy msgid "Python Packages" msgstr "Paquets Python" @@ -4171,14 +4167,13 @@ msgstr "Nécessiter SSL pour les opérations de VCS" #: kallithea/templates/admin/settings/settings_vcs.html:13 -#, fuzzy msgid "" "Activate to require SSL both pushing and pulling. If SSL certificate is " "missing, it will return an HTTP Error 406: Not Acceptable." msgstr "" -"Activez pour faire en sorte que Kallithea force l'utilisation de SSL pour" -" pousser ou tirer. Si le certificate SSL est manquant, une erreur HTTP " -"406 Not Acceptable sera retournée." +"Activez pour faire en sorte que Kallithea force l'utilisation de SSL pour " +"pousser ou tirer. Si le certificat SSL est manquant, une erreur « HTTP 406: " +"Not Acceptable » sera renvoyée." #: kallithea/templates/admin/settings/settings_vcs.html:24 msgid "Show repository size after push" @@ -4197,31 +4192,28 @@ msgstr "Mettre à jour les dépôts après un push (hg update)" #: kallithea/templates/admin/settings/settings_vcs.html:42 -#, fuzzy msgid "Mercurial extensions" msgstr "Extensions Mercurial" #: kallithea/templates/admin/settings/settings_vcs.html:47 msgid "Enable largefiles extension" -msgstr "" +msgstr "Activer l'extension largefiles" #: kallithea/templates/admin/settings/settings_vcs.html:51 msgid "Enable hgsubversion extension" msgstr "Activer l'extension hgsubversion" #: kallithea/templates/admin/settings/settings_vcs.html:53 -#, fuzzy msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -"La bibliothèque hgsubversion doit être installée. Elle permet de cloner " -"des dépôts SVN distants et de les migrer vers Mercurial." +"La bibliothèque hgsubversion doit être installée. Elle permet de cloner des " +"dépôts SVN distants et de les migrer vers Mercurial." #: kallithea/templates/admin/settings/settings_vcs.html:64 -#, fuzzy msgid "Location of repositories" -msgstr "Dépôts totaux" +msgstr "Emplacement des dépôts" #: kallithea/templates/admin/settings/settings_vcs.html:69 msgid "" @@ -4236,30 +4228,34 @@ "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" +"Emplacement où les dépôts sont stockés sur le système de fichiers. La " +"modification de cette valeur nécessite un re-démarrage et un nouveau scan." #: kallithea/templates/admin/settings/settings_visual.html:8 msgid "General" -msgstr "" +msgstr "Général" #: kallithea/templates/admin/settings/settings_visual.html:13 msgid "Use repository extra fields" -msgstr "" +msgstr "Activer les champs supplémentaires sur les dépôts" #: kallithea/templates/admin/settings/settings_visual.html:15 msgid "Allows storing additional customized fields per repository." msgstr "" +"Permet d'enregistrer des champs personnalisés additionnels pour chaque dépôt." #: kallithea/templates/admin/settings/settings_visual.html:18 msgid "Show Kallithea version" -msgstr "" +msgstr "Afficher la version de Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:20 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" +"Afficher ou cacher le numéro de version de Kallithea dans le pied de page." #: kallithea/templates/admin/settings/settings_visual.html:24 msgid "Use Gravatars in Kallithea" -msgstr "" +msgstr "Utiliser Gravatar sur Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:30 msgid "" @@ -4277,6 +4273,20 @@ " {netloc} " "network location/server host of running Kallithea server" msgstr "" +"L'URL de Gravatar vous permet d'utiliser un autre serveur d'avatars.\n" +" Les variables " +"suivantes dans l'URL seront remplacées comme suit :\n" +" {scheme} 'http' " +"ou 'https' envoyé à partir du serveur Kallithea en cours d'utilisation,\n" +" {email} adresse " +"e-mail de l'utilisateur,\n" +" {md5email} " +"empreinte md5 (hash) de l'adresse e-mail de l'utilisateur (comme sur " +"gravatar.com),\n" +" {size} taille " +"de l'image demandée au serveur,\n" +" {netloc} " +"emplacement réseau/hôte du serveur Kallithea en cours d'utilisation." #: kallithea/templates/admin/settings/settings_visual.html:42 msgid "" @@ -4295,26 +4305,44 @@ " {repoid} ID of " "repository, can be used to contruct clone-by-id" msgstr "" +"Modèle de construction d'URL de clone. Par exemple : " +"'{scheme}://{user}@{netloc}/{repo}'.\n" +" Les variables " +"suivantes sont disponibles :\n" +" {scheme} 'http' " +"ou 'https' envoyé à partir du serveur Kallithea en cours d'utilisation,\n" +" {user} nom de " +"l'utilisateur courant,\n" +" {netloc} " +"emplacement réseau/hôte du serveur Kallithea en cours d'utilisation,\n" +" {repo} nom " +"complet du dépôt,\n" +" {repoid} ID du " +"dépôt, peut être utilisé pour cloner par ID." #: kallithea/templates/admin/settings/settings_visual.html:55 msgid "Dashboard items" -msgstr "" +msgstr "Élements du tableau de bord" #: kallithea/templates/admin/settings/settings_visual.html:59 msgid "" "Number of items displayed in the main page dashboard before pagination is" " shown." msgstr "" +"Nombre d'éléments affichés dans la page principale du tableau de bord avant " +"d'afficher la pagination." #: kallithea/templates/admin/settings/settings_visual.html:65 msgid "Admin pages items" -msgstr "" +msgstr "Élements des pages admin" #: kallithea/templates/admin/settings/settings_visual.html:69 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" +"Nombre d'éléments affichés dans les grilles des pages admin avant d'afficher " +"la pagination." #: kallithea/templates/admin/settings/settings_visual.html:75 msgid "Icons" @@ -4329,60 +4357,59 @@ msgstr "Afficher l’icône de dépôt privé sur les dépôts" #: kallithea/templates/admin/settings/settings_visual.html:86 -#, fuzzy msgid "Show public/private icons next to repository names." -msgstr "Afficher l’icône de dépôt public sur les dépôts" +msgstr "Afficher l’icône « public/privé » à côté du nom des dépôts." #: kallithea/templates/admin/settings/settings_visual.html:92 -#, fuzzy msgid "Meta Tagging" msgstr "Meta-tagging" #: kallithea/templates/admin/settings/settings_visual.html:97 msgid "Stylify recognised meta tags:" -msgstr "" +msgstr "Styliser les méta-tags reconnus :" #: kallithea/templates/admin/settings/settings_visual.html:111 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +"Analyser les méta-tags dans le champ de description du dépôt et les " +"transformer en tags colorés." #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" -msgstr "" +msgstr "Ajouter un groupe d'utilisateurs" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 #: kallithea/templates/admin/user_groups/user_groups.html:10 #: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 msgid "User Groups" -msgstr "" +msgstr "Groupes d'utilisateurs" #: kallithea/templates/admin/user_groups/user_group_add.html:12 #: kallithea/templates/admin/user_groups/user_groups.html:25 msgid "Add User Group" -msgstr "" +msgstr "Ajouter un groupe d'utilisateurs" #: kallithea/templates/admin/user_groups/user_group_add.html:44 #: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 msgid "Short, optional description for this user group." -msgstr "" +msgstr "Description courte pour ce groupe d'utilisateur (optionnel)." #: kallithea/templates/admin/user_groups/user_group_edit.html:5 #, python-format msgid "%s user group settings" -msgstr "" +msgstr "Réglages du groupe d'utilisateurs %s" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 -#, fuzzy msgid "Show Members" -msgstr "Membres" +msgstr "Afficher les membres" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:1 #, python-format msgid "User Group: %s" -msgstr "" +msgstr "Groupe d'utilisateurs : %s" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 #: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 @@ -4394,28 +4421,27 @@ #: kallithea/templates/data_table/_dt_elements.html:174 #, python-format msgid "Confirm to delete this user group: %s" -msgstr "" +msgstr "Voulez-vous vraiment supprimer ce groupe utilisateur : %s ?" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:21 msgid "Delete this user group" -msgstr "" +msgstr "Supprimer ce groupe d'utilisateurs" #: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 msgid "No members yet" -msgstr "" +msgstr "Aucun membre pour l'instant" #: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 msgid "Chosen group members" -msgstr "" +msgstr "Membres de groupe sélectionnés" #: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 msgid "Available members" msgstr "Membres disponibles" #: kallithea/templates/admin/user_groups/user_groups.html:5 -#, fuzzy msgid "User Groups Administration" -msgstr "Administration des groupes de dépôts" +msgstr "Administration des groupes d'utilisateurs" #: kallithea/templates/admin/users/user_add.html:5 msgid "Add user" @@ -4431,7 +4457,7 @@ #: kallithea/templates/admin/users/user_add.html:12 #: kallithea/templates/admin/users/users.html:24 msgid "Add User" -msgstr "" +msgstr "Ajouter un utilisateur" #: kallithea/templates/admin/users/user_add.html:50 msgid "Password confirmation" @@ -4440,30 +4466,30 @@ #: kallithea/templates/admin/users/user_edit.html:5 #, python-format msgid "%s user settings" -msgstr "" +msgstr "Réglages de l'utilisateur %s" #: kallithea/templates/admin/users/user_edit.html:30 msgid "Emails" -msgstr "" +msgstr "E-mails" #: kallithea/templates/admin/users/user_edit_advanced.html:1 #, python-format msgid "User: %s" -msgstr "" +msgstr "Utilisateur : %s" #: kallithea/templates/admin/users/user_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_profile.html:42 msgid "Source of Record" -msgstr "" +msgstr "Source de l'enregistrement" #: kallithea/templates/admin/users/user_edit_advanced.html:9 #: kallithea/templates/admin/users/users.html:53 msgid "Last Login" -msgstr "" +msgstr "Dernière connexion" #: kallithea/templates/admin/users/user_edit_advanced.html:10 msgid "Member of User Groups" -msgstr "" +msgstr "Membre des groupes d'utilisateurs" #: kallithea/templates/admin/users/user_edit_advanced.html:21 #: kallithea/templates/data_table/_dt_elements.html:158 @@ -4473,46 +4499,46 @@ #: kallithea/templates/admin/users/user_edit_advanced.html:23 msgid "Delete this user" -msgstr "" +msgstr "Supprimer cet utilisateur" #: kallithea/templates/admin/users/user_edit_ips.html:8 #, python-format msgid "Inherited from %s" -msgstr "" +msgstr "Hérité de %s" #: kallithea/templates/admin/users/user_edit_profile.html:8 msgid "Change avatar at" -msgstr "" +msgstr "Changer l'avatar sur" #: kallithea/templates/admin/users/user_edit_profile.html:12 msgid "Missing email, please update this user email address." msgstr "" +"E-mail manquant, veuillez mettre à jour l'adresse e-mail de cet utilisateur." #: kallithea/templates/admin/users/user_edit_profile.html:51 msgid "Name in Source of Record" -msgstr "" +msgstr "Nom dans la source de l'enregistrement" #: kallithea/templates/admin/users/user_edit_profile.html:69 msgid "New password confirmation" msgstr "Confirmation du nouveau mot de passe" #: kallithea/templates/admin/users/users.html:5 -#, fuzzy msgid "Users Administration" msgstr "Administration des utilisateurs" #: kallithea/templates/admin/users/users.html:56 msgid "Auth Type" -msgstr "" +msgstr "Type d'authentification" #: kallithea/templates/base/base.html:18 #, python-format msgid "Server instance: %s" -msgstr "" +msgstr "Instance de serveur : %s" #: kallithea/templates/base/base.html:30 msgid "Support" -msgstr "" +msgstr "Support" #: kallithea/templates/base/base.html:90 msgid "Mercurial repository" @@ -4523,9 +4549,8 @@ msgstr "Dépôt Git" #: kallithea/templates/base/base.html:119 -#, fuzzy msgid "Create Fork" -msgstr "créé" +msgstr "Créer un fork" #: kallithea/templates/base/base.html:130 #: kallithea/templates/data_table/_dt_elements.html:13 @@ -4551,7 +4576,7 @@ #: kallithea/templates/base/base.html:138 msgid "Switch To" -msgstr "" +msgstr "Basculer vers" #: kallithea/templates/base/base.html:145 #: kallithea/templates/base/base.html:147 @@ -4560,7 +4585,6 @@ #: kallithea/templates/base/base.html:155 #: kallithea/templates/forks/forks_data.html:21 -#, fuzzy msgid "Compare Fork" msgstr "Comparer le fork" @@ -4583,19 +4607,19 @@ #: kallithea/templates/base/base.html:163 msgid "Unlock" -msgstr "" +msgstr "Déverrouiller" #: kallithea/templates/base/base.html:165 msgid "Lock" -msgstr "" +msgstr "Verrouiller" #: kallithea/templates/base/base.html:173 msgid "Follow" -msgstr "" +msgstr "Suivre" #: kallithea/templates/base/base.html:174 msgid "Unfollow" -msgstr "" +msgstr "Arrêter de suivre" #: kallithea/templates/base/base.html:177 #: kallithea/templates/data_table/_dt_elements.html:37 @@ -4607,16 +4631,16 @@ #: kallithea/templates/base/base.html:178 #: kallithea/templates/pullrequests/pullrequest.html:88 msgid "Create Pull Request" -msgstr "" +msgstr "Créer une requête de pull" #: kallithea/templates/base/base.html:183 #, python-format msgid "Show Pull Requests for %s" -msgstr "" +msgstr "Afficher les requêtes de pull pour %s" #: kallithea/templates/base/base.html:221 msgid "Show recent activity" -msgstr "" +msgstr "Afficher l'activité récente" #: kallithea/templates/base/base.html:227 #: kallithea/templates/base/base.html:228 @@ -4625,45 +4649,40 @@ #: kallithea/templates/base/base.html:233 msgid "Show public gists" -msgstr "" +msgstr "Afficher les gists publics" #: kallithea/templates/base/base.html:234 msgid "Gists" -msgstr "" +msgstr "Gists" #: kallithea/templates/base/base.html:238 -#, fuzzy msgid "All Public Gists" -msgstr "Gists publics" +msgstr "Tous les Gists publics" #: kallithea/templates/base/base.html:240 -#, fuzzy msgid "My Public Gists" -msgstr "Gists publics" +msgstr "Mes Gists publics" #: kallithea/templates/base/base.html:241 -#, fuzzy msgid "My Private Gists" -msgstr "Gist privé" +msgstr "Mes Gist privés" #: kallithea/templates/base/base.html:246 msgid "Search in repositories" -msgstr "" +msgstr "Recherche dans les dépôts" #: kallithea/templates/base/base.html:269 #: kallithea/templates/base/base.html:270 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -#, fuzzy msgid "My Pull Requests" -msgstr "Requêtes de pull" +msgstr "Mes requêtes de pull" #: kallithea/templates/base/base.html:289 msgid "Not Logged In" -msgstr "" +msgstr "Non connecté" #: kallithea/templates/base/base.html:296 -#, fuzzy msgid "Login to Your Account" msgstr "Connexion à votre compte" @@ -4677,20 +4696,19 @@ #: kallithea/templates/base/base.html:395 msgid "No matches found" -msgstr "" +msgstr "Aucune correspondance trouvée" #: kallithea/templates/base/base.html:524 msgid "Keyboard shortcuts" -msgstr "" +msgstr "Raccourcis clavier" #: kallithea/templates/base/base.html:533 msgid "Site-wide shortcuts" -msgstr "" +msgstr "Raccourcis globaux" #: kallithea/templates/base/default_perms_box.html:14 -#, fuzzy msgid "Inherit defaults" -msgstr "Réglages par défaut du dépôt" +msgstr "Hériter des réglages par défaut" #: kallithea/templates/base/default_perms_box.html:19 #, python-format @@ -4698,6 +4716,8 @@ "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" +"Sélectionner pour hériter des réglages généraux, de la liste blanche d'IP et " +"des permissions depuis les %s." #: kallithea/templates/base/default_perms_box.html:28 msgid "Create repositories" @@ -4706,14 +4726,17 @@ #: kallithea/templates/base/default_perms_box.html:33 msgid "Select this option to allow repository creation for this user" msgstr "" +"Sélectionner cette option pour autoriser cet utilisateur à créer des dépôts" #: kallithea/templates/base/default_perms_box.html:40 msgid "Create user groups" -msgstr "" +msgstr "Créer des groupes d'utilisateurs" #: kallithea/templates/base/default_perms_box.html:45 msgid "Select this option to allow user group creation for this user" msgstr "" +"Sélectionner cette option pour autoriser cet utilisateur à créer des groupes " +"d'utilisateurs" #: kallithea/templates/base/default_perms_box.html:52 msgid "Fork repositories" @@ -4722,6 +4745,7 @@ #: kallithea/templates/base/default_perms_box.html:57 msgid "Select this option to allow repository forking for this user" msgstr "" +"Sélectionner cette option pour autoriser cet utilisateur à forker des dépôts" #: kallithea/templates/base/perms_summary.html:13 #: kallithea/templates/changelog/changelog.html:42 @@ -4730,7 +4754,7 @@ #: kallithea/templates/base/perms_summary.html:22 msgid "No permissions defined yet" -msgstr "" +msgstr "Aucune permission définie pour l'instant" #: kallithea/templates/base/perms_summary.html:30 #: kallithea/templates/base/perms_summary.html:54 @@ -4744,12 +4768,11 @@ #: kallithea/templates/base/perms_summary.html:90 msgid "No permission defined" -msgstr "" +msgstr "Aucune permission définie" #: kallithea/templates/base/root.html:22 -#, fuzzy msgid "Add Another Comment" -msgstr "%d commentaire" +msgstr "Ajouter un autre commentaire" #: kallithea/templates/base/root.html:23 #: kallithea/templates/data_table/_dt_elements.html:214 @@ -4770,38 +4793,35 @@ #: kallithea/templates/base/root.html:27 msgid "Loading ..." -msgstr "" +msgstr "Chargement..." #: kallithea/templates/base/root.html:28 msgid "loading ..." -msgstr "" +msgstr "chargement..." #: kallithea/templates/base/root.html:29 msgid "Search truncated" -msgstr "" +msgstr "Recherche tronquée" #: kallithea/templates/base/root.html:30 msgid "No matching files" -msgstr "" +msgstr "Aucun fichier correspondant" #: kallithea/templates/base/root.html:31 -#, fuzzy #| msgid "on pull request" msgid "Open New Pull Request from {0}" -msgstr "[a commenté] la requête de pull pour" +msgstr "Ouvrir une nouvelle requête de pull à partir de {0}" #: kallithea/templates/base/root.html:32 msgid "Open New Pull Request for {0} → {1}" -msgstr "" +msgstr "Ouvrir une nouvelle requête de pull pour {0} → {1}" #: kallithea/templates/base/root.html:33 -#, fuzzy #| msgid "Show Selected Changeset __S" msgid "Show Selected Changesets {0} → {1}" -msgstr "Sélectionner le changeset" +msgstr "Afficher les changesets sélectionnés {0} → {1}" #: kallithea/templates/base/root.html:34 -#, fuzzy msgid "Selection Link" msgstr "Lien vers la sélection" @@ -4816,12 +4836,11 @@ #: kallithea/templates/base/root.html:37 msgid "Failed to revoke permission" -msgstr "" +msgstr "Échec de la révocation de permission" #: kallithea/templates/base/root.html:38 -#, fuzzy msgid "Confirm to revoke permission for {0}: {1} ?" -msgstr "Impossible de révoquer votre permission d'administrateur" +msgstr "Voulez-vous vraiment révoquer la permission pour {0} : {1} ?" #: kallithea/templates/base/root.html:39 msgid "enabled" @@ -4832,7 +4851,6 @@ msgstr "désactivé" #: kallithea/templates/base/root.html:42 -#, fuzzy msgid "Specify changeset" msgstr "Sélectionner le changeset" @@ -4843,7 +4861,7 @@ #: kallithea/templates/bookmarks/bookmarks.html:26 msgid "Compare Bookmarks" -msgstr "" +msgstr "Comparer les marque-pages" #: kallithea/templates/bookmarks/bookmarks.html:53 #: kallithea/templates/bookmarks/bookmarks_data.html:10 @@ -4875,7 +4893,7 @@ #: kallithea/templates/branches/branches.html:26 msgid "Compare Branches" -msgstr "" +msgstr "Comparer les branches" #: kallithea/templates/changelog/changelog.html:6 #, python-format @@ -4891,29 +4909,27 @@ #: kallithea/templates/changelog/changelog.html:49 msgid "Clear selection" -msgstr "" +msgstr "Vider la sélection" #: kallithea/templates/changelog/changelog.html:55 -#, fuzzy msgid "Go to tip of repository" -msgstr "Veuillez confirmer le verrouillage de ce dépôt" +msgstr "Aller au sommet (tip) du dépôt" #: kallithea/templates/changelog/changelog.html:60 #: kallithea/templates/forks/forks_data.html:19 #, python-format msgid "Compare fork with %s" -msgstr "" +msgstr "Comparer le fork avec %s" #: kallithea/templates/changelog/changelog.html:62 #, python-format msgid "Compare fork with parent repository (%s)" -msgstr "" +msgstr "Comparer le fork avec le dépôt parent (%s)" #: kallithea/templates/changelog/changelog.html:66 #: kallithea/templates/files/files.html:29 -#, fuzzy msgid "Branch filter:" -msgstr "filtre" +msgstr "Filtre de branche :" #: kallithea/templates/changelog/changelog.html:92 #: kallithea/templates/changelog/changelog_summary_data.html:20 @@ -4922,22 +4938,24 @@ "Changeset status: %s\n" "Click to open associated pull request %s" msgstr "" +"Statut du changeset : %s\n" +"Cliquer pour ouvrir la requête de pull %s associée" #: kallithea/templates/changelog/changelog.html:96 #: kallithea/templates/compare/compare_cs.html:24 #, python-format msgid "Changeset status: %s" -msgstr "" +msgstr "Statut de changeset : %s" #: kallithea/templates/changelog/changelog.html:115 #: kallithea/templates/compare/compare_cs.html:63 msgid "Expand commit message" -msgstr "" +msgstr "Développer le message de commit" #: kallithea/templates/changelog/changelog.html:124 #: kallithea/templates/compare/compare_cs.html:30 msgid "Changeset has comments" -msgstr "" +msgstr "Le changeset a des commentaires" #: kallithea/templates/changelog/changelog.html:134 #: kallithea/templates/changelog/changelog_summary_data.html:54 @@ -4945,7 +4963,7 @@ #: kallithea/templates/changeset/changeset_range.html:92 #, python-format msgid "Bookmark %s" -msgstr "" +msgstr "Marque-page %s" #: kallithea/templates/changelog/changelog.html:140 #: kallithea/templates/changelog/changelog_summary_data.html:60 @@ -4953,7 +4971,7 @@ #: kallithea/templates/changeset/changeset_range.html:98 #, python-format msgid "Tag %s" -msgstr "" +msgstr "Tag %s" #: kallithea/templates/changelog/changelog.html:145 #: kallithea/templates/changelog/changelog_summary_data.html:65 @@ -4961,7 +4979,7 @@ #: kallithea/templates/changeset/changeset_range.html:102 #, python-format msgid "Branch %s" -msgstr "" +msgstr "Branche %s" #: kallithea/templates/changelog/changelog.html:310 msgid "There are no changes yet" @@ -4970,18 +4988,18 @@ #: kallithea/templates/changelog/changelog_details.html:4 #: kallithea/templates/changeset/changeset.html:77 msgid "Removed" -msgstr "" +msgstr "Supprimé" #: kallithea/templates/changelog/changelog_details.html:5 #: kallithea/templates/changeset/changeset.html:78 msgid "Changed" -msgstr "" +msgstr "Modifié" #: kallithea/templates/changelog/changelog_details.html:6 #: kallithea/templates/changeset/changeset.html:79 #: kallithea/templates/changeset/diff_block.html:79 msgid "Added" -msgstr "" +msgstr "Ajouté" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 @@ -4991,23 +5009,23 @@ #: kallithea/templates/changeset/changeset.html:83 #, python-format msgid "Affected %s files" -msgstr "" +msgstr "%s fichiers affectés" #: kallithea/templates/changelog/changelog_summary_data.html:8 #: kallithea/templates/files/files_add.html:60 #: kallithea/templates/files/files_delete.html:39 #: kallithea/templates/files/files_edit.html:63 msgid "Commit Message" -msgstr "" +msgstr "Message de commit" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 msgid "Age" -msgstr "" +msgstr "Âge" #: kallithea/templates/changelog/changelog_summary_data.html:11 msgid "Refs" -msgstr "" +msgstr "Refs" #: kallithea/templates/changelog/changelog_summary_data.html:81 msgid "Add or upload files directly via Kallithea" @@ -5017,10 +5035,9 @@ #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 msgid "Add New File" -msgstr "" +msgstr "Ajouter un nouveau fichier" #: kallithea/templates/changelog/changelog_summary_data.html:90 -#, fuzzy msgid "Push new repository" msgstr "Pusher le nouveau dépôt" @@ -5035,11 +5052,11 @@ #: kallithea/templates/changeset/changeset.html:36 msgid "Parent rev." -msgstr "" +msgstr "Révision parente" #: kallithea/templates/changeset/changeset.html:42 msgid "Child rev." -msgstr "" +msgstr "Révision fille" #: kallithea/templates/changeset/changeset.html:50 #: kallithea/templates/changeset/changeset_file_comment.html:37 @@ -5051,42 +5068,38 @@ #: kallithea/templates/changeset/diff_block.html:27 #: kallithea/templates/files/diff_2way.html:49 msgid "Raw diff" -msgstr "" +msgstr "Diff brut" #: kallithea/templates/changeset/changeset.html:57 msgid "Patch diff" -msgstr "" +msgstr "Diff patch" #: kallithea/templates/changeset/changeset.html:60 #: kallithea/templates/changeset/diff_block.html:30 #: kallithea/templates/files/diff_2way.html:52 msgid "Download diff" -msgstr "" +msgstr "Télécharger le diff" #: kallithea/templates/changeset/changeset.html:89 #: kallithea/templates/changeset/changeset_range.html:88 -#, fuzzy msgid "Merge" msgstr "Fusion" #: kallithea/templates/changeset/changeset.html:123 -#, fuzzy msgid "Grafted from:" -msgstr "Créé le" +msgstr "Grafté depuis :" #: kallithea/templates/changeset/changeset.html:129 msgid "Transplanted from:" -msgstr "" +msgstr "Transplanté depuis :" #: kallithea/templates/changeset/changeset.html:135 -#, fuzzy msgid "Replaced by:" -msgstr "créé" +msgstr "Remplacé par :" #: kallithea/templates/changeset/changeset.html:149 -#, fuzzy msgid "Preceded by:" -msgstr "créé" +msgstr "Précédé par :" #: kallithea/templates/changeset/changeset.html:166 #: kallithea/templates/compare/compare_diff.html:54 @@ -5094,8 +5107,8 @@ #, python-format msgid "%s file changed" msgid_plural "%s files changed" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s fichier changé" +msgstr[1] "%s fichiers changés" #: kallithea/templates/changeset/changeset.html:168 #: kallithea/templates/compare/compare_diff.html:56 @@ -5103,46 +5116,40 @@ #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s fichier changé avec %s insertions et %s suppressions" +msgstr[1] "%s fichiers changés avec %s insertions et %s suppressions" #: kallithea/templates/changeset/changeset.html:182 #: kallithea/templates/changeset/changeset.html:195 #: kallithea/templates/pullrequests/pullrequest_show.html:339 #: kallithea/templates/pullrequests/pullrequest_show.html:363 msgid "Show full diff anyway" -msgstr "" +msgstr "Afficher le diff complet quand même" #: kallithea/templates/changeset/changeset.html:247 #: kallithea/templates/changeset/changeset.html:284 -#, fuzzy msgid "No revisions" -msgstr "révisions" +msgstr "Aucune révision" #: kallithea/templates/changeset/changeset_file_comment.html:21 -#, fuzzy msgid "on pull request" -msgstr "[a commenté] la requête de pull pour" +msgstr "sur la requête de pull" #: kallithea/templates/changeset/changeset_file_comment.html:22 -#, fuzzy msgid "No title" -msgstr "nouveau fichier" +msgstr "Aucun titre" #: kallithea/templates/changeset/changeset_file_comment.html:24 -#, fuzzy msgid "on this changeset" -msgstr "Aucun changeset" +msgstr "sur ce changeset" #: kallithea/templates/changeset/changeset_file_comment.html:30 -#, fuzzy msgid "Delete comment?" -msgstr "%d commentaire" +msgstr "Supprimer le commentaire ?" #: kallithea/templates/changeset/changeset_file_comment.html:37 -#, fuzzy msgid "Status change" -msgstr "fichiers modifiés" +msgstr "Changement de statut" #: kallithea/templates/changeset/changeset_file_comment.html:59 msgid "Commenting on line {1}." @@ -5157,19 +5164,17 @@ "commande %s." #: kallithea/templates/changeset/changeset_file_comment.html:62 -#, fuzzy msgid "Use @username inside this text to notify another user" msgstr "" -"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à " -"l’utilisateur Kallithea en question" +"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à un " +"autre utilisateur" #: kallithea/templates/changeset/changeset_file_comment.html:72 #: kallithea/templates/changeset/changeset_file_comment.html:184 msgid "Comment preview" -msgstr "" +msgstr "Aperçu du commentaire" #: kallithea/templates/changeset/changeset_file_comment.html:77 -#, fuzzy msgid "Submitting ..." msgstr "Envoi…" @@ -5181,7 +5186,7 @@ #: kallithea/templates/changeset/changeset_file_comment.html:82 #: kallithea/templates/changeset/changeset_file_comment.html:191 msgid "Preview" -msgstr "" +msgstr "Aperçu" #: kallithea/templates/changeset/changeset_file_comment.html:90 msgid "You need to be logged in to comment." @@ -5203,44 +5208,40 @@ msgstr[1] "%d commentaires" #: kallithea/templates/changeset/changeset_file_comment.html:107 -#, fuzzy, python-format +#, python-format msgid "%d inline" msgid_plural "%d inline" -msgstr[0] "(et %d en ligne)" -msgstr[1] "(et %d en ligne)" +msgstr[0] "%d de ligne" +msgstr[1] "%d de ligne" #: kallithea/templates/changeset/changeset_file_comment.html:108 #, python-format msgid "%d general" msgid_plural "%d general" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d général" +msgstr[1] "%d généraux" #: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy msgid "Use @username inside this text to notify another user." msgstr "" -"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à " -"l’utilisateur Kallithea en question" +"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à un " +"autre utilisateur." #: kallithea/templates/changeset/changeset_file_comment.html:157 msgid "Vote for pull request status" -msgstr "" +msgstr "Voter pour le statut de la requête de pull" #: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy msgid "Set changeset status" -msgstr "Statut du changeset" +msgstr "Modifier le statut du changeset" #: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy msgid "No change" msgstr "Aucun changement" #: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy msgid "Close" -msgstr "(fermé)" +msgstr "Fermer" #: kallithea/templates/changeset/changeset_range.html:5 #, python-format @@ -5254,27 +5255,25 @@ #: kallithea/templates/changeset/diff_block.html:21 #: kallithea/templates/files/diff_2way.html:43 msgid "Show full diff for this file" -msgstr "" +msgstr "Afficher le diff complet pour ce fichier" #: kallithea/templates/changeset/diff_block.html:24 #: kallithea/templates/changeset/diff_block.html:98 #: kallithea/templates/files/diff_2way.html:46 msgid "Show full side-by-side diff for this file" -msgstr "" +msgstr "Afficher le diff complet côte-à-côte pour ce fichier" #: kallithea/templates/changeset/diff_block.html:38 msgid "Show inline comments" -msgstr "" +msgstr "Afficher les commentaires de ligne" #: kallithea/templates/changeset/diff_block.html:86 -#, fuzzy msgid "Deleted" -msgstr "Supprimer" +msgstr "Supprimé" #: kallithea/templates/changeset/diff_block.html:89 -#, fuzzy msgid "Renamed" -msgstr "renommer" +msgstr "Renommé" #: kallithea/templates/compare/compare_cs.html:4 msgid "No changesets" @@ -5286,19 +5285,19 @@ #: kallithea/templates/compare/compare_cs.html:44 msgid "First (oldest) changeset in this list" -msgstr "" +msgstr "Premier changeset dans cette liste (le plus vieux)" #: kallithea/templates/compare/compare_cs.html:46 msgid "Last (most recent) changeset in this list" -msgstr "" +msgstr "Dernier changeset dans cette liste (le plus récent)" #: kallithea/templates/compare/compare_cs.html:48 msgid "Position in this list of changesets" -msgstr "" +msgstr "Position dans cette liste de changesets" #: kallithea/templates/compare/compare_cs.html:76 msgid "Show merge diff" -msgstr "" +msgstr "Afficher le diff de fusion" #: kallithea/templates/compare/compare_cs.html:86 #: kallithea/templates/pullrequests/pullrequest_show.html:310 @@ -5310,51 +5309,49 @@ msgstr "Aucun ancêtre commun trouvé - les dépôts n'ont aucun lien entre eux" #: kallithea/templates/compare/compare_cs.html:98 -#, fuzzy msgid "is" -msgstr "Gist" +msgstr "est" #: kallithea/templates/compare/compare_cs.html:99 -#, fuzzy, python-format +#, python-format msgid "%s changesets" msgstr "Changesets de %s" #: kallithea/templates/compare/compare_cs.html:100 -#, fuzzy msgid "behind" -msgstr "Mettre à jour l’index" +msgstr "derrière" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 #, python-format msgid "%s Compare" -msgstr "" +msgstr "Comparaison de %s" #: kallithea/templates/compare/compare_diff.html:13 #: kallithea/templates/compare/compare_diff.html:35 msgid "Compare Revisions" -msgstr "" +msgstr "Comparer les révisions" #: kallithea/templates/compare/compare_diff.html:33 msgid "Swap" -msgstr "" +msgstr "Échanger" #: kallithea/templates/compare/compare_diff.html:42 msgid "Compare revisions, branches, bookmarks, or tags." -msgstr "" +msgstr "Comparer les révisions, les branches, les marque-pages ou les tags." #: kallithea/templates/compare/compare_diff.html:47 #: kallithea/templates/pullrequests/pullrequest_show.html:305 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Affichage de %s commit" +msgstr[1] "Affichage de %s commits" #: kallithea/templates/compare/compare_diff.html:78 #: kallithea/templates/compare/compare_diff.html:89 msgid "Show full diff" -msgstr "" +msgstr "Afficher le diff complet" #: kallithea/templates/data_table/_dt_elements.html:74 msgid "Public repository" @@ -5362,7 +5359,7 @@ #: kallithea/templates/data_table/_dt_elements.html:84 msgid "Repository creation in progress..." -msgstr "" +msgstr "Création du dépôt en cours..." #: kallithea/templates/data_table/_dt_elements.html:98 msgid "No changesets yet" @@ -5382,83 +5379,88 @@ #: kallithea/templates/data_table/_dt_elements.html:139 msgid "Creating" -msgstr "" +msgstr "En cours de création" #: kallithea/templates/email_templates/changeset_comment.html:5 #, python-format msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" +msgstr "Le commentaire de %s sur le changeset de %s (%s) mentionne votre nom" #: kallithea/templates/email_templates/changeset_comment.html:7 #, python-format msgid "Comment from %s on %s changeset %s" -msgstr "" +msgstr "Commentaire de %s sur le changeset de %s (%s)" #: kallithea/templates/email_templates/changeset_comment.html:12 msgid "The changeset status was changed to" -msgstr "" +msgstr "Le statut du changeset a été changé en" #: kallithea/templates/email_templates/main.html:6 msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" +msgstr "Ceci est une notification automatique. Ne pas répondre à cet e-mail." #: kallithea/templates/email_templates/password_reset.html:4 #, python-format msgid "Hello %s" -msgstr "" +msgstr "Bonjour %s" #: kallithea/templates/email_templates/password_reset.html:6 msgid "We have received a request to reset the password for your account." msgstr "" +"Nous avons reçu une demande de réinitialisation du mot de passe de votre " +"compte." #: kallithea/templates/email_templates/password_reset.html:7 msgid "To set a new password, click the following link" -msgstr "" +msgstr "Pour choisir un nouveau mot de passe, cliquez sur le lien suivant" #: kallithea/templates/email_templates/password_reset.html:10 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" +"Si vous ne pouvez pas utiliser le lien ci-dessus, merci de saisir le code " +"suivant dans le formulaire de réinitialisation de mot de passe" #: kallithea/templates/email_templates/password_reset.html:12 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" +"Si vous n'avez pas demandé la réinitialisation de votre mot de passe, ne " +"tenez pas compte de ce message." #: kallithea/templates/email_templates/pull_request.html:5 -#, fuzzy, python-format +#, python-format msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" +msgstr "%s a mentionné votre nom dans la requête de pull %s « %s »" #: kallithea/templates/email_templates/pull_request.html:7 -#, fuzzy, python-format +#, python-format msgid "%s requested your review of %s pull request \"%s\"" -msgstr "" +msgstr "%s vous demande de vérifier la requête de pull %s « %s »" #: kallithea/templates/email_templates/pull_request_comment.html:4 -#, fuzzy, python-format +#, python-format msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" +msgstr "Commentaire de %s sur la requête de pull %s « %s »" #: kallithea/templates/email_templates/pull_request_comment.html:9 -#, fuzzy msgid "The comment closed the pull request with status" -msgstr "Montrer les demandes de pull fermées" +msgstr "Le commentaire a fermé la requête de pull avec le statut" #: kallithea/templates/email_templates/pull_request_comment.html:11 msgid "The comment was made with status" -msgstr "" +msgstr "Le commentaire a été fait avec le statut" #: kallithea/templates/email_templates/registration.html:6 msgid "View this user here" -msgstr "" +msgstr "Visualiser cet utilisateur ici" #: kallithea/templates/files/diff_2way.html:15 #, python-format msgid "%s File side-by-side diff" -msgstr "" +msgstr "Diff côte-à-côte de fichier pour %s" #: kallithea/templates/files/diff_2way.html:19 #: kallithea/templates/files/file_diff.html:8 @@ -5468,7 +5470,7 @@ #: kallithea/templates/files/file_diff.html:4 #, python-format msgid "%s File Diff" -msgstr "" +msgstr "Diff de fichier pour %s" #: kallithea/templates/files/files.html:4 #: kallithea/templates/files/files.html:80 @@ -5479,7 +5481,7 @@ #: kallithea/templates/files/files_add.html:4 #, python-format msgid "%s Files Add" -msgstr "" +msgstr "Ajout de fichiers pour %s" #: kallithea/templates/files/files_add.html:40 #: kallithea/templates/files/files_edit.html:38 @@ -5489,7 +5491,7 @@ #: kallithea/templates/files/files_add.html:42 msgid "Enter filename..." -msgstr "" +msgstr "Saisir le nom du fichier..." #: kallithea/templates/files/files_add.html:44 #: kallithea/templates/files/files_add.html:48 @@ -5498,38 +5500,37 @@ #: kallithea/templates/files/files_add.html:44 msgid "Upload File" -msgstr "" +msgstr "Uploader un fichier" #: kallithea/templates/files/files_add.html:48 msgid "Create New File" -msgstr "" +msgstr "Créer un nouveau fichier" #: kallithea/templates/files/files_add.html:53 msgid "New file mode" -msgstr "" +msgstr "Mode du nouveau fichier" #: kallithea/templates/files/files_add.html:64 #: kallithea/templates/files/files_delete.html:43 #: kallithea/templates/files/files_edit.html:67 -#, fuzzy msgid "Commit Changes" msgstr "Commiter les changements" #: kallithea/templates/files/files_browser.html:33 msgid "Previous revision" -msgstr "" +msgstr "Révision précédente" #: kallithea/templates/files/files_browser.html:35 msgid "Next revision" -msgstr "" +msgstr "Révision suivante" #: kallithea/templates/files/files_browser.html:41 msgid "Follow current branch" -msgstr "" +msgstr "Suivre la branche courante" #: kallithea/templates/files/files_browser.html:44 msgid "Search File List" -msgstr "" +msgstr "Rechercher dans la liste des fichiers" #: kallithea/templates/files/files_browser.html:48 msgid "Loading file list..." @@ -5544,47 +5545,45 @@ msgstr "Dernière révision" #: kallithea/templates/files/files_browser.html:63 -#, fuzzy msgid "Last Modified" msgstr "Dernière modification" #: kallithea/templates/files/files_browser.html:64 -#, fuzzy msgid "Last Committer" msgstr "Dernier commiteur" #: kallithea/templates/files/files_delete.html:4 #, python-format msgid "%s Files Delete" -msgstr "" +msgstr "Suppression de fichiers pour %s" #: kallithea/templates/files/files_delete.html:12 #: kallithea/templates/files/files_delete.html:31 msgid "Delete file" -msgstr "" +msgstr "Supprimer le fichier" #: kallithea/templates/files/files_edit.html:4 #, python-format msgid "%s File Edit" -msgstr "" +msgstr "Édition de fichier pour %s" #: kallithea/templates/files/files_edit.html:21 msgid "Edit file" -msgstr "" +msgstr "Éditer le fichier" #: kallithea/templates/files/files_edit.html:48 #: kallithea/templates/files/files_source.html:32 msgid "Show Annotation" -msgstr "" +msgstr "Afficher l'annotation" #: kallithea/templates/files/files_edit.html:50 #: kallithea/templates/files/files_source.html:35 msgid "Download as Raw" -msgstr "" +msgstr "Télécharger au format brut" #: kallithea/templates/files/files_edit.html:53 msgid "Source" -msgstr "" +msgstr "Source" #: kallithea/templates/files/files_edit.html:58 msgid "Editing file" @@ -5599,40 +5598,44 @@ #: kallithea/templates/files/files_source.html:7 msgid "Diff to Revision" -msgstr "" +msgstr "Diff par rapport à une révision" #: kallithea/templates/files/files_source.html:8 msgid "Show at Revision" -msgstr "" +msgstr "Afficher à une révision" #: kallithea/templates/files/files_source.html:10 msgid "Show Full History" -msgstr "" +msgstr "Afficher l'historique complet" #: kallithea/templates/files/files_source.html:11 msgid "Show Authors" -msgstr "" +msgstr "Afficher les auteurs" #: kallithea/templates/files/files_source.html:30 msgid "Show Source" -msgstr "" +msgstr "Afficher la source" #: kallithea/templates/files/files_source.html:38 #, python-format msgid "Edit on Branch:%s" -msgstr "" +msgstr "Éditer sur la branche : %s" #: kallithea/templates/files/files_source.html:41 msgid "Editing binary files not allowed" -msgstr "" +msgstr "Édition de fichiers binaires interdite" #: kallithea/templates/files/files_source.html:44 msgid "Editing files allowed only when on branch head revision" msgstr "" +"Édition de fichiers autorisée uniquement sur la révision de tête (head) de " +"la branche" #: kallithea/templates/files/files_source.html:45 msgid "Deleting files allowed only when on branch head revision" msgstr "" +"Suppression de fichiers autorisée uniquement sur la révision de tête (head) " +"de la branche" #: kallithea/templates/files/files_source.html:63 #, python-format @@ -5649,7 +5652,7 @@ #: kallithea/templates/files/files_ypjax.html:23 msgid "Go Back" -msgstr "" +msgstr "Retour" #: kallithea/templates/files/files_ypjax.html:24 msgid "No files at given path" @@ -5673,18 +5676,17 @@ #: kallithea/templates/forks/fork.html:5 #, python-format msgid "Fork repository %s" -msgstr "" +msgstr "Forker le dépôt %s" #: kallithea/templates/forks/fork.html:27 msgid "Fork name" msgstr "Nom du fork" #: kallithea/templates/forks/fork.html:62 -#, fuzzy msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" "Révision par défaut pour les pages de fichiers, de téléchargements, de " -"recherche et de documentation" +"recherche et de documentation." #: kallithea/templates/forks/fork.html:68 msgid "Private" @@ -5708,7 +5710,7 @@ #: kallithea/templates/forks/fork.html:96 msgid "Fork this Repository" -msgstr "" +msgstr "Forker ce dépôt" #: kallithea/templates/forks/forks.html:5 #, python-format @@ -5723,7 +5725,7 @@ #: kallithea/templates/forks/forks_data.html:17 msgid "Forked" -msgstr "" +msgstr "Forké" #: kallithea/templates/forks/forks_data.html:30 msgid "There are no forks yet" @@ -5755,7 +5757,6 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 -#, fuzzy msgid "New Pull Request" msgstr "Nouvelle requête de pull" @@ -5768,55 +5769,53 @@ #: kallithea/templates/pullrequests/pullrequest.html:34 msgid "Summarize the changes - or leave empty" -msgstr "" +msgstr "Résumer les modifications - ou laisser vide" #: kallithea/templates/pullrequests/pullrequest.html:43 #: kallithea/templates/pullrequests/pullrequest_show.html:66 msgid "Write a short description on this pull request" -msgstr "" +msgstr "Saisir une courte description de cette requête de pull" #: kallithea/templates/pullrequests/pullrequest.html:49 msgid "Changeset flow" -msgstr "" +msgstr "Flux des changesets" #: kallithea/templates/pullrequests/pullrequest.html:56 msgid "Origin repository" -msgstr "" +msgstr "Dépôt d'origine" #: kallithea/templates/pullrequests/pullrequest.html:72 msgid "Destination repository" -msgstr "" +msgstr "Dépôt de destination" #: kallithea/templates/pullrequests/pullrequest_data.html:6 -#, fuzzy msgid "No entries" -msgstr "Aucune entrée pour le moment" +msgstr "Aucune entrée" #: kallithea/templates/pullrequests/pullrequest_data.html:14 -#, fuzzy msgid "Vote" -msgstr "Révoquer" +msgstr "Voter" #: kallithea/templates/pullrequests/pullrequest_data.html:18 msgid "From" -msgstr "" +msgstr "Depuis" #: kallithea/templates/pullrequests/pullrequest_data.html:19 msgid "To" -msgstr "" +msgstr "Vers" #: kallithea/templates/pullrequests/pullrequest_data.html:28 #, python-format msgid "You voted: %s" -msgstr "" +msgstr "Vous avez voté : %s" #: kallithea/templates/pullrequests/pullrequest_data.html:30 msgid "You didn't vote" -msgstr "" +msgstr "Vous n'avez pas voté" #: kallithea/templates/pullrequests/pullrequest_data.html:35 msgid "(no title)" -msgstr "" +msgstr "(sans titre)" #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 @@ -5825,42 +5824,42 @@ msgstr "Fermée" #: kallithea/templates/pullrequests/pullrequest_data.html:67 -#, fuzzy msgid "Delete Pull Request" -msgstr "Nouvelle requête de pull" +msgstr "Supprimer la requête de pull" #: kallithea/templates/pullrequests/pullrequest_data.html:68 msgid "Confirm to delete this pull request" msgstr "Veuillez confirmer la suppression de cette requête de pull" #: kallithea/templates/pullrequests/pullrequest_data.html:70 -#, fuzzy, python-format +#, python-format msgid "Confirm again to delete this pull request with %s comments" -msgstr "Veuillez confirmer la suppression de cette requête de pull" +msgstr "" +"Veuillez confirmer la suppression de cette requête de pull avec %s " +"commentaires" #: kallithea/templates/pullrequests/pullrequest_show.html:6 -#, fuzzy, python-format +#, python-format msgid "%s Pull Request %s" -msgstr "Requête de pull #%s" +msgstr "%s Requête de pull %s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 -#, fuzzy, python-format +#, python-format msgid "Pull request %s from %s#%s" -msgstr "Requête de pull #%s" +msgstr "Requête de pull %s depuis %s#%s" #: kallithea/templates/pullrequests/pullrequest_show.html:57 -#, fuzzy msgid "Summarize the changes" -msgstr "Commiter les changements" +msgstr "Résumer les changements" #: kallithea/templates/pullrequests/pullrequest_show.html:74 msgid "Reviewer voting result" -msgstr "" +msgstr "Résultat du vote des relecteurs" #: kallithea/templates/pullrequests/pullrequest_show.html:80 #: kallithea/templates/pullrequests/pullrequest_show.html:81 msgid "Pull request status calculated from votes" -msgstr "" +msgstr "Statut de la requête de pull calculé à partir des votes" #: kallithea/templates/pullrequests/pullrequest_show.html:93 msgid "Still not reviewed by" @@ -5875,145 +5874,137 @@ #: kallithea/templates/pullrequests/pullrequest_show.html:99 msgid "Pull request was reviewed by all reviewers" -msgstr "" +msgstr "La requête de pull a été relue par tous les relecteurs" #: kallithea/templates/pullrequests/pullrequest_show.html:101 -#, fuzzy msgid "There are no reviewers" -msgstr "Aucune branche n’a été créée pour le moment" +msgstr "Il n'y a aucun relecteur" #: kallithea/templates/pullrequests/pullrequest_show.html:107 msgid "Origin" -msgstr "" +msgstr "Origine" #: kallithea/templates/pullrequests/pullrequest_show.html:113 -#, fuzzy msgid "on" -msgstr "Aucune" +msgstr "sur" #: kallithea/templates/pullrequests/pullrequest_show.html:120 msgid "Target" -msgstr "" +msgstr "Cible" #: kallithea/templates/pullrequests/pullrequest_show.html:124 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" +"Ceci est juste une série de changesets, et n'a pas de cible ou de véritable " +"ancêtre de fusion." #: kallithea/templates/pullrequests/pullrequest_show.html:133 msgid "Pull changes" -msgstr "" +msgstr "Puller les modifications" #: kallithea/templates/pullrequests/pullrequest_show.html:173 -#, fuzzy msgid "Update" -msgstr "[a mis à jour] l’utilisateur" +msgstr "Mettre à jour" #: kallithea/templates/pullrequests/pullrequest_show.html:191 msgid "Current revision - no change" -msgstr "" +msgstr "Révision courante - aucun changement" #: kallithea/templates/pullrequests/pullrequest_show.html:213 -#, fuzzy msgid "Pull Request Reviewers" msgstr "Relecteurs de la requête de pull" #: kallithea/templates/pullrequests/pullrequest_show.html:238 -#, fuzzy msgid "Remove reviewer" -msgstr "%d relecteur" +msgstr "Supprimer le relecteur" #: kallithea/templates/pullrequests/pullrequest_show.html:250 msgid "Type name of reviewer to add" -msgstr "" +msgstr "Saisir le nom du relecteur à ajouter" #: kallithea/templates/pullrequests/pullrequest_show.html:258 -#, fuzzy msgid "Potential Reviewers" -msgstr "%d relecteur" +msgstr "Relecteurs potentiels" #: kallithea/templates/pullrequests/pullrequest_show.html:261 msgid "Click to add the repository owner as reviewer:" -msgstr "" +msgstr "Cliquer pour ajouter le propriétaire du dépôt comme relecteur :" #: kallithea/templates/pullrequests/pullrequest_show.html:284 msgid "Save Changes" -msgstr "" +msgstr "Enregistrer les changements" #: kallithea/templates/pullrequests/pullrequest_show.html:285 -#, fuzzy msgid "Save as New Pull Request" -msgstr "Nouvelle requête de pull" +msgstr "Sauvegarder en tant que nouvelle requête de pull" #: kallithea/templates/pullrequests/pullrequest_show.html:286 -#, fuzzy msgid "Cancel Changes" -msgstr "Sélectionner le changeset" +msgstr "Annuler les modifications" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -#, fuzzy msgid "Pull Request Content" -msgstr "Requêtes de pull" +msgstr "Contenu de la requête de pull" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" -msgstr "" +msgstr "Requêtes de pull pour %s" #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 -#, fuzzy, python-format +#, python-format msgid "Pull Requests from %s'" -msgstr "Requête de pull #%s" +msgstr "Requête de pull depuis %s'" #: kallithea/templates/pullrequests/pullrequest_show_all.html:13 -#, fuzzy, python-format +#, python-format msgid "Pull Requests to '%s'" -msgstr "Requête de pull #%s" +msgstr "Requête de pull vers '%s'" #: kallithea/templates/pullrequests/pullrequest_show_all.html:32 -#, fuzzy msgid "Open New Pull Request" -msgstr "Nouvelle requête de pull" +msgstr "Ouvrir une nouvelle requête de pull" #: kallithea/templates/pullrequests/pullrequest_show_all.html:37 -#, fuzzy, python-format +#, python-format msgid "Show Pull Requests to %s" -msgstr "Requête de pull #%s" +msgstr "Afficher les requêtes de pull vers %s" #: kallithea/templates/pullrequests/pullrequest_show_all.html:39 -#, fuzzy, python-format +#, python-format msgid "Show Pull Requests from '%s'" -msgstr "" +msgstr "Afficher les requêtes de pull depuis '%s'" #: kallithea/templates/pullrequests/pullrequest_show_all.html:49 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" +"Cacher les requêtes de pull fermées (afficher uniquement les requêtes de " +"pull ouvertes)" #: kallithea/templates/pullrequests/pullrequest_show_all.html:51 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" +"Afficher les requêtes de pull fermées (en plus des requêtes de pull ouvertes)" #: kallithea/templates/pullrequests/pullrequest_show_my.html:35 -#, fuzzy msgid "Pull Requests Created by Me" -msgstr "Relecteurs de la requête de pull" +msgstr "Requêtes de pull créées par moi" #: kallithea/templates/pullrequests/pullrequest_show_my.html:38 -#, fuzzy msgid "Pull Requests I Participate In" -msgstr "Je participe à" +msgstr "Requêtes de pull auxquelles je participe" #: kallithea/templates/search/search.html:6 #, python-format msgid "%s Search" -msgstr "" +msgstr "Recherche pour %s" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 -#, fuzzy msgid "Search in All Repositories" msgstr "Rechercher dans tous les dépôts" @@ -6046,25 +6037,25 @@ #: kallithea/templates/summary/statistics.html:4 #, python-format msgid "%s Statistics" -msgstr "" +msgstr "Statistiques pour %s" #: kallithea/templates/summary/statistics.html:16 #: kallithea/templates/summary/summary.html:39 #, python-format msgid "%s ATOM feed" -msgstr "" +msgstr "Flux ATOM pour %s" #: kallithea/templates/summary/statistics.html:17 #: kallithea/templates/summary/summary.html:40 #, python-format msgid "%s RSS feed" -msgstr "" +msgstr "Flux RSS pour %s" #: kallithea/templates/summary/statistics.html:36 #: kallithea/templates/summary/summary.html:100 #: kallithea/templates/summary/summary.html:116 msgid "Enable" -msgstr "" +msgstr "Activer" #: kallithea/templates/summary/statistics.html:39 msgid "Stats gathered: " @@ -6078,7 +6069,7 @@ #: kallithea/templates/summary/statistics.html:113 #: kallithea/templates/summary/summary.html:373 msgid "Show more" -msgstr "" +msgstr "Afficher plus" #: kallithea/templates/summary/statistics.html:390 msgid "commits" @@ -6120,11 +6111,11 @@ #: kallithea/templates/summary/summary.html:13 #, python-format msgid "Repository locked by %s" -msgstr "" +msgstr "Dépôt verrouillé par %s" #: kallithea/templates/summary/summary.html:15 msgid "Repository unlocked" -msgstr "" +msgstr "Dépôt déverrouillé" #: kallithea/templates/summary/summary.html:22 msgid "Fork of" @@ -6171,9 +6162,8 @@ msgstr "Télécharger une archive contenant également les sous-dépôts éventuels" #: kallithea/templates/summary/summary.html:125 -#, fuzzy msgid "With subrepos" -msgstr "avec les sous-dépôts" +msgstr "Avec les sous-dépôts" #: kallithea/templates/summary/summary.html:156 msgid "Repository Size" @@ -6242,6 +6232,8 @@ #~ msgstr "Aucun fichier" #~ msgid "" +#~ "_: \n" +#~ "" #~ msgstr "" #~ msgid "Username \"%(username)s\" is forbidden"
--- a/kallithea/i18n/how_to Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/i18n/how_to Fri Oct 02 22:46:15 2015 +0200 @@ -50,11 +50,11 @@ In the prepared development environment, run the following to ensure all translation strings are extracted and up-to-date:: - python setup.py extract_messages + python2 setup.py extract_messages Create new language by executing following command:: - python setup.py init_catalog -l <new_language_code> + python2 setup.py init_catalog -l <new_language_code> This creates a new translation under directory `kallithea/i18n/<new_language_code>` based on the translation template file, `kallithea/i18n/kallithea.pot`. @@ -67,7 +67,7 @@ Finally, compile the translations:: - python setup.py compile_catalog -l <new_language_code> + python2 setup.py compile_catalog -l <new_language_code> Updating translations @@ -75,11 +75,11 @@ Extract the latest versions of strings for translation by running:: - python setup.py extract_messages + python2 setup.py extract_messages Update the PO file by doing:: - python setup.py update_catalog -l <new_language_code> + python2 setup.py update_catalog -l <new_language_code> Edit the new updated translation file. Repeat all steps after `init_catalog` step from new translation instructions
--- a/kallithea/i18n/ru/LC_MESSAGES/kallithea.po Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/i18n/ru/LC_MESSAGES/kallithea.po Fri Oct 02 22:46:15 2015 +0200 @@ -1904,34 +1904,34 @@ msgstr "" #: kallithea/model/notification.py:254 -#, fuzzy, python-format +#, python-format msgid "%(user)s commented on changeset %(age)s" -msgstr "%(user)s оставил комментарий к набору изменений %(when)s" +msgstr "%(user)s оставил комментарий к набору изменений %(age)s" #: kallithea/model/notification.py:255 -#, fuzzy, python-format +#, python-format msgid "%(user)s sent message %(age)s" -msgstr "%(user)s отправил сообщение %(when)s" +msgstr "%(user)s отправил сообщение %(age)s" #: kallithea/model/notification.py:256 -#, fuzzy, python-format +#, python-format msgid "%(user)s mentioned you %(age)s" -msgstr "%(user)s упомянул вас %(when)s" +msgstr "%(user)s упомянул вас %(age)s" #: kallithea/model/notification.py:257 -#, fuzzy, python-format +#, python-format msgid "%(user)s registered in Kallithea %(age)s" -msgstr "%(user)s зарегистрировался в Kallithea %(when)s" +msgstr "%(user)s зарегистрировался в Kallithea %(age)s" #: kallithea/model/notification.py:258 -#, fuzzy, python-format +#, python-format msgid "%(user)s opened new pull request %(age)s" -msgstr "%(user)s открыл новый pull-запрос %(when)s" +msgstr "%(user)s открыл новый pull-запрос %(age)s" #: kallithea/model/notification.py:259 -#, fuzzy, python-format +#, python-format msgid "%(user)s commented on pull request %(age)s" -msgstr "%(user)s оставил комментарий к pull-запросу %(when)s" +msgstr "%(user)s оставил комментарий к pull-запросу %(age)s" #: kallithea/model/notification.py:266 #, python-format
--- a/kallithea/lib/auth.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/lib/auth.py Fri Oct 02 22:46:15 2015 +0200 @@ -34,7 +34,7 @@ from decorator import decorator -from pylons import url, request +from pylons import url, request, session from pylons.controllers.util import abort, redirect from pylons.i18n.translation import _ from webhelpers.pylonslib import secure_form @@ -712,11 +712,12 @@ def redirect_to_login(message=None): from kallithea.lib import helpers as h - p = url.current() + p = request.path_qs if message: h.flash(h.literal(message), category='warning') log.debug('Redirecting to login page, origin: %s', p) - return redirect(url('login_home', came_from=p, **request.GET)) + return redirect(url('login_home', came_from=p)) + class LoginRequired(object): """ @@ -765,6 +766,15 @@ if request.method not in ['GET', 'HEAD', 'POST', 'PUT']: return abort(405) + # Make sure CSRF token never appears in the URL. If so, invalidate it. + if secure_form.token_key in request.GET: + log.error('CSRF key leak detected') + session.pop(secure_form.token_key, None) + session.save() + from kallithea.lib import helpers as h + h.flash(_("CSRF token leak has been detected - all form tokens have been expired"), + category='error') + # CSRF protection: Whenever a request has ambient authority (whether # through a session cookie or its origin IP address), it must include # the correct token, unless the HTTP method is GET or HEAD (and thus
--- a/kallithea/lib/helpers.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/lib/helpers.py Fri Oct 02 22:46:15 2015 +0200 @@ -36,12 +36,13 @@ from webhelpers.html.tags import auto_discovery_link, checkbox, css_classes, \ end_form, file, hidden, image, javascript_link, link_to, \ link_to_if, link_to_unless, ol, required_legend, select, stylesheet_link, \ - submit, text, password, textarea, title, ul, xml_declaration, radio + submit, text, password, textarea, title, ul, xml_declaration, radio, \ + form as insecure_form from webhelpers.html.tools import auto_link, button_to, highlight, \ js_obfuscate, mail_to, strip_links, strip_tags, tag_re from webhelpers.number import format_byte_size, format_bit_size from webhelpers.pylonslib import Flash as _Flash -from webhelpers.pylonslib.secure_form import secure_form as form, authentication_token +from webhelpers.pylonslib.secure_form import secure_form, authentication_token from webhelpers.text import chop_at, collapse, convert_accented_entities, \ convert_misc_entities, lchop, plural, rchop, remove_formatting, \ replace_whitespace, urlify, truncate, wrap_paragraphs @@ -1451,3 +1452,13 @@ from kallithea.model.db import UserIpMap s, e = UserIpMap._get_ip_range(ip_addr) return '%s - %s' % (s, e) + + +def form(url, method="post", **attrs): + """Like webhelpers.html.tags.form but automatically using secure_form with + authentication_token for POST. authentication_token is thus never leaked + in the URL.""" + if method.lower() == 'get': + return insecure_form(url, method=method, **attrs) + # webhelpers will turn everything but GET into POST + return secure_form(url, method=method, **attrs)
--- a/kallithea/lib/rcmail/response.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/lib/rcmail/response.py Fri Oct 02 22:46:15 2015 +0200 @@ -138,7 +138,7 @@ as __init__ parameters, or by setting those attributes. You can initially set the From, To, and Subject, but they are headers so - use the dict notation to change them: msg['From'] = 'joe@test.com'. + use the dict notation to change them: msg['From'] = 'joe@example.com'. The message is not fully crafted until right when you convert it with MailResponse.to_message. This lets you change it and work with it, then
--- a/kallithea/lib/vcs/backends/git/repository.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/lib/vcs/backends/git/repository.py Fri Oct 02 22:46:15 2015 +0200 @@ -675,10 +675,10 @@ try: update_server_info(self._repo) except OSError as e: - if e.errno != errno.ENOENT: + if e.errno not in [errno.ENOENT, errno.EROFS]: raise # Workaround for dulwich crashing on for example its own dulwich/tests/data/repos/simple_merge.git/info/refs.lock - log.error('Ignoring error running update-server-info: %s', e) + log.error('Ignoring %s running update-server-info: %s', type(e).__name__, e) @LazyProperty def workdir(self):
--- a/kallithea/model/comment.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/model/comment.py Fri Oct 02 22:46:15 2015 +0200 @@ -100,7 +100,7 @@ recipients += [cs_author] email_kwargs = { 'status_change': status_change, - 'cs_comment_user': h.person(user, 'full_name_and_username'), + 'cs_comment_user': user.full_name_and_username, 'cs_target_repo': h.canonical_url('summary_home', repo_name=repo.repo_name), 'cs_comment_url': comment_url, 'raw_id': revision, @@ -148,7 +148,7 @@ 'status_change': status_change, 'closing_pr': closing_pr, 'pr_comment_url': comment_url, - 'pr_comment_user': h.person(user, 'full_name_and_username'), + 'pr_comment_user': user.full_name_and_username, 'pr_target_repo': h.canonical_url('summary_home', repo_name=pull_request.other_repo.repo_name), 'repo_name': pull_request.other_repo.repo_name,
--- a/kallithea/model/pull_request.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/model/pull_request.py Fri Oct 02 22:46:15 2015 +0200 @@ -111,11 +111,11 @@ mention_recipients = set(User.get_by_username(username, case_insensitive=True) for username in extract_mentioned_users(new.description)) - self.__add_reviewers(new, reviewers, mention_recipients) + self.__add_reviewers(created_by_user, new, reviewers, mention_recipients) return new - def __add_reviewers(self, pr, reviewers, mention_recipients=None): + def __add_reviewers(self, user, pr, reviewers, mention_recipients=None): #members for member in set(reviewers): _usr = self._get_user(member) @@ -135,7 +135,7 @@ subject = safe_unicode( h.link_to( _('%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s') % \ - {'user': pr.owner.username, + {'user': user.username, 'pr_title': pr.title, 'pr_nice_id': pr.nice_id()}, pr_url) @@ -144,19 +144,19 @@ _org_ref_type, org_ref_name, _org_rev = pr.org_ref.split(':') email_kwargs = { 'pr_title': pr.title, - 'pr_user_created': h.person(pr.owner), + 'pr_user_created': user.full_name_and_username, 'pr_repo_url': h.canonical_url('summary_home', repo_name=pr.other_repo.repo_name), 'pr_url': pr_url, 'pr_revisions': revision_data, 'repo_name': pr.other_repo.repo_name, 'pr_nice_id': pr.nice_id(), 'ref': org_ref_name, - 'pr_username': pr.owner.username, + 'pr_username': user.username, 'threading': threading, 'is_mention': False, } if reviewers: - NotificationModel().create(created_by=pr.owner, subject=subject, body=body, + NotificationModel().create(created_by=user, subject=subject, body=body, recipients=reviewers, type_=Notification.TYPE_PULL_REQUEST, email_kwargs=email_kwargs) @@ -167,21 +167,21 @@ if mention_recipients: email_kwargs['is_mention'] = True subject = _('[Mention]') + ' ' + subject - NotificationModel().create(created_by=pr.owner, subject=subject, body=body, + NotificationModel().create(created_by=user, subject=subject, body=body, recipients=mention_recipients, type_=Notification.TYPE_PULL_REQUEST, email_kwargs=email_kwargs) - def mention_from_description(self, pr, old_description=''): + def mention_from_description(self, user, pr, old_description=''): mention_recipients = set(User.get_by_username(username, case_insensitive=True) for username in extract_mentioned_users(pr.description)) mention_recipients.difference_update(User.get_by_username(username, case_insensitive=True) for username in extract_mentioned_users(old_description)) log.debug("Mentioning %s", mention_recipients) - self.__add_reviewers(pr, [], mention_recipients) + self.__add_reviewers(user, pr, [], mention_recipients) - def update_reviewers(self, pull_request, reviewers_ids): + def update_reviewers(self, user, pull_request, reviewers_ids): reviewers_ids = set(reviewers_ids) pull_request = self.__get_pull_request(pull_request) current_reviewers = PullRequestReviewers.query()\ @@ -194,7 +194,7 @@ to_remove = current_reviewers_ids.difference(reviewers_ids) log.debug("Adding %s reviewers", to_add) - self.__add_reviewers(pull_request, to_add) + self.__add_reviewers(user, pull_request, to_add) log.debug("Removing %s reviewers", to_remove) for uid in to_remove:
--- a/kallithea/public/css/style.css Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/public/css/style.css Fri Oct 02 22:46:15 2015 +0200 @@ -4309,7 +4309,7 @@ background-color: #FAFAFA; } -.inline-comments .add-comment { +.inline-comments .add-button-row { padding: 2px 4px 8px 5px; } @@ -4826,6 +4826,7 @@ div.comment:target>.comment-wrapp { border: solid 2px #ee0 !important; + margin: 2px 2px 4px 4px; } .lineno:target a {
--- a/kallithea/public/js/base.js Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/public/js/base.js Fri Oct 02 22:46:15 2015 +0200 @@ -655,7 +655,7 @@ // set $comment_div state - showing or not showing form and Add button function comment_div_state($comment_div, f_path, line_no, show_form) { var $forms = $comment_div.children('.comment-inline-form'); - var $buttons = $comment_div.children('.add-comment'); + var $buttonrow = $comment_div.children('.add-button-row'); var $comments = $comment_div.children('.comment'); if (show_form) { if (!$forms.length) { @@ -664,7 +664,7 @@ } else { $forms.remove(); } - $buttons.remove(); + $buttonrow.remove(); if ($comments.length && !show_form) { _comment_div_append_add($comment_div, f_path, line_no); } @@ -673,9 +673,9 @@ // append an Add button to $comment_div and hook it up to show form function _comment_div_append_add($comment_div, f_path, line_no) { var addlabel = TRANSLATION_MAP['Add Another Comment']; - var $add = $('<div class="add-comment"><span class="btn btn-mini">{0}</span></div>'.format(addlabel)); + var $add = $('<div class="add-button-row"><span class="btn btn-mini add-button">{0}</span></div>'.format(addlabel)); $comment_div.append($add); - $add.click(function(e) { + $add.children('.add-button').click(function(e) { comment_div_state($comment_div, f_path, line_no, true); }); } @@ -896,14 +896,14 @@ }; -var initCodeMirror = function(textarea_id, resetUrl){ +var initCodeMirror = function(textarea_id, baseUrl, resetUrl){ var myCodeMirror = CodeMirror.fromTextArea($('#' + textarea_id)[0], { mode: "null", lineNumbers: true, indentUnit: 4, autofocus: true }); - CodeMirror.modeURL = "/codemirror/mode/%N/%N.js"; + CodeMirror.modeURL = baseUrl + "/codemirror/mode/%N/%N.js"; $('#reset').click(function(e){ window.location=resetUrl; @@ -951,7 +951,7 @@ var getSelectionLink = function(e) { //get selection from start/to nodes if (typeof window.getSelection != "undefined") { - s = window.getSelection(); + var s = window.getSelection(); var from = _getIdentNode(s.anchorNode); var till = _getIdentNode(s.focusNode);
--- a/kallithea/public/js/codemirror_loadmode.js Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/public/js/codemirror_loadmode.js Fri Oct 02 22:46:15 2015 +0200 @@ -1,7 +1,4 @@ (function() { - // FIXME: if this default value ever is used, it will probably be wrong - if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; - var loading = {}; function splitCallback(cont, n) { var countDown = n;
--- a/kallithea/templates/about.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/about.html Fri Oct 02 22:46:15 2015 +0200 @@ -62,6 +62,7 @@ <li>Copyright © 2015, Niemand Jedermann</li> <li>Copyright © 2015, Peter Vitt</li> <li>Copyright © 2015, Robert Martinez</li> + <li>Copyright © 2015, Robert Rauch</li> <li>Copyright © 2015, Ronny Pfannschmidt</li> <li>Copyright © 2015, Sam Jaques</li> <li>Copyright © 2015, Søren Løvborg</li>
--- a/kallithea/templates/admin/gists/edit.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/admin/gists/edit.html Fri Oct 02 22:46:15 2015 +0200 @@ -81,7 +81,7 @@ ## dynamic edit box. <script type="text/javascript"> - var myCodeMirror = initCodeMirror("editor_${h.FID('f',file.path)}", ''); + var myCodeMirror = initCodeMirror("editor_${h.FID('f',file.path)}", "${request.script_name}", ''); //inject new modes var $modes_select = $('#mimetype_${h.FID('f',file.path)}');
--- a/kallithea/templates/admin/gists/new.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/admin/gists/new.html Fri Oct 02 22:46:15 2015 +0200 @@ -59,7 +59,7 @@ </div> ${h.end_form()} <script type="text/javascript"> - var myCodeMirror = initCodeMirror('editor', ''); + var myCodeMirror = initCodeMirror('editor', "${request.script_name}", ''); //inject new modes var $modes_select = $('#mimetype');
--- a/kallithea/templates/admin/notifications/notifications_data.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/admin/notifications/notifications_data.html Fri Oct 02 22:46:15 2015 +0200 @@ -32,7 +32,7 @@ <div class="notification-paginator"> <div class="pagination-wh pagination-left"> - ${c.notifications.pager('$link_previous ~2~ $link_next',**request.GET.mixed())} + ${c.notifications.pager('$link_previous ~2~ $link_next',controller='admin/notifications',**request.GET.mixed())} </div> </div>
--- a/kallithea/templates/base/base.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/base/base.html Fri Oct 02 22:46:15 2015 +0200 @@ -294,7 +294,7 @@ <div id="quick_login"> %if c.authuser.username == 'default' or c.authuser.user_id is None: <h4>${_('Login to Your Account')}</h4> - ${h.form(h.url('login_home',came_from=h.url.current()))} + ${h.form(h.url('login_home', came_from=request.path_qs))} <div class="form"> <div class="fields"> <div class="field">
--- a/kallithea/templates/changelog/changelog.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/changelog/changelog.html Fri Oct 02 22:46:15 2015 +0200 @@ -110,7 +110,7 @@ </a> </td> <td class="date"> - <div class="date">${h.age(cs.date,True)}</div> + <div class="date tooltip" title="${h.fmt_date(cs.date)}">${h.age(cs.date,True)}</div> </td> <td class="expand_commit" commit_id="${cs.raw_id}" title="${_('Expand commit message')}"> <i class="icon-align-left" style="color:#999"></i>
--- a/kallithea/templates/changeset/changeset_file_comment.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/changeset/changeset_file_comment.html Fri Oct 02 22:46:15 2015 +0200 @@ -87,7 +87,7 @@ ${h.form('')} <div class="clearfix"> <div class="comment-help"> - ${_('You need to be logged in to comment.')} <a href="${h.url('login_home',came_from=h.url.current())}">${_('Login now')}</a> + ${_('You need to be logged in to comment.')} <a href="${h.url('login_home', came_from=request.path_qs)}">${_('Login now')}</a> </div> </div> <div class="comment-button">
--- a/kallithea/templates/files/files_add.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/files/files_add.html Fri Oct 02 22:46:15 2015 +0200 @@ -67,7 +67,7 @@ ${h.end_form()} <script type="text/javascript"> var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path)}"; - var myCodeMirror = initCodeMirror('editor',reset_url); + var myCodeMirror = initCodeMirror('editor', "${request.script_name}", reset_url); //inject new modes, based on codeMirrors modeInfo object $('#set_mode').each(function(){
--- a/kallithea/templates/files/files_edit.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/files/files_edit.html Fri Oct 02 22:46:15 2015 +0200 @@ -75,7 +75,7 @@ <script type="text/javascript"> $(document).ready(function(){ var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.file.path)}"; - var myCodeMirror = initCodeMirror('editor',reset_url); + var myCodeMirror = initCodeMirror('editor', "${request.script_name}", reset_url); //inject new modes, based on codeMirrors modeInfo object $('#set_mode').each(function(){
--- a/kallithea/templates/login.html Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/templates/login.html Fri Oct 02 22:46:15 2015 +0200 @@ -16,7 +16,7 @@ %endif </div> <div class="panel-body inner"> - ${h.form(h.url.current(**request.GET))} + ${h.form(url('login_home', came_from=c.came_from))} <div class="form"> <i class="icon-lock"></i> <!-- fields -->
--- a/kallithea/tests/__init__.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/__init__.py Fri Oct 02 22:46:15 2015 +0200 @@ -90,15 +90,15 @@ TESTS_TMP_PATH = jn('/', 'tmp', 'rc_test_%s' % _RandomNameSequence().next()) TEST_USER_ADMIN_LOGIN = 'test_admin' TEST_USER_ADMIN_PASS = 'test12' -TEST_USER_ADMIN_EMAIL = 'test_admin@mail.com' +TEST_USER_ADMIN_EMAIL = 'test_admin@example.com' TEST_USER_REGULAR_LOGIN = 'test_regular' TEST_USER_REGULAR_PASS = 'test12' -TEST_USER_REGULAR_EMAIL = 'test_regular@mail.com' +TEST_USER_REGULAR_EMAIL = 'test_regular@example.com' TEST_USER_REGULAR2_LOGIN = 'test_regular2' TEST_USER_REGULAR2_PASS = 'test12' -TEST_USER_REGULAR2_EMAIL = 'test_regular2@mail.com' +TEST_USER_REGULAR2_EMAIL = 'test_regular2@example.com' HG_REPO = 'vcs_test_hg' GIT_REPO = 'vcs_test_git'
--- a/kallithea/tests/api/api_base.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/api/api_base.py Fri Oct 02 22:46:15 2015 +0200 @@ -552,7 +552,7 @@ def test_api_create_existing_user(self): id_, params = _build_data(self.apikey, 'create_user', username=TEST_USER_ADMIN_LOGIN, - email='test@foo.com', + email='test@example.com', password='trololo') response = api_call(self, params) @@ -571,7 +571,7 @@ def test_api_create_user(self): username = 'test_new_api_user' - email = username + "@foo.com" + email = username + "@example.com" id_, params = _build_data(self.apikey, 'create_user', username=username, @@ -593,7 +593,7 @@ def test_api_create_user_without_password(self): username = 'test_new_api_user_passwordless' - email = username + "@foo.com" + email = username + "@example.com" id_, params = _build_data(self.apikey, 'create_user', username=username, @@ -613,7 +613,7 @@ def test_api_create_user_with_extern_name(self): username = 'test_new_api_user_passwordless' - email = username + "@foo.com" + email = username + "@example.com" id_, params = _build_data(self.apikey, 'create_user', username=username, @@ -635,7 +635,7 @@ def test_api_create_user_when_exception_happened(self): username = 'test_new_api_user' - email = username + "@foo.com" + email = username + "@example.com" id_, params = _build_data(self.apikey, 'create_user', username=username, @@ -1138,7 +1138,7 @@ ('description', {'description': 'new description'}), ('active', {'active': True}), ('active', {'active': False}), - ('clone_uri', {'clone_uri': 'http://foo.com/repo'}), + ('clone_uri', {'clone_uri': 'http://example.com/repo'}), ('clone_uri', {'clone_uri': None}), ('landing_rev', {'landing_rev': 'branch:master'}), ('enable_statistics', {'enable_statistics': True}),
--- a/kallithea/tests/functional/test_admin_users.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/functional/test_admin_users.py Fri Oct 02 22:46:15 2015 +0200 @@ -47,7 +47,7 @@ password_confirmation = password name = 'name' lastname = 'lastname' - email = 'mail@mail.com' + email = 'mail@example.com' response = self.app.post(url('users'), {'username': username, @@ -83,7 +83,7 @@ password = '' name = 'name' lastname = 'lastname' - email = 'errmail.com' + email = 'errmail.example.com' response = self.app.post(url('users'), {'username': username, 'password': password, @@ -119,7 +119,7 @@ ('extern_name', {'extern_name': None}), ('active', {'active': False}), ('active', {'active': True}), - ('email', {'email': 'some@email.com'}), + ('email', {'email': 'someemail@example.com'}), # ('new_password', {'new_password': 'foobar123', # 'password_confirmation': 'foobar123'}) ])
--- a/kallithea/tests/functional/test_files.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/functional/test_files.py Fri Oct 02 22:46:15 2015 +0200 @@ -97,7 +97,7 @@ revision='8911406ad776fdd3d0b9932a2e89677e57405a48', f_path='vcs/nodes.py')) - response.mustcontain("""<div class="commit">Partially implemented <a class="issue-tracker-link" href="https://myissueserver.com/vcs_test_hg/issue/16">#16</a>. filecontent/commit message/author/node name are safe_unicode now. + response.mustcontain("""<div class="commit">Partially implemented <a class="issue-tracker-link" href="https://issues.example.com/vcs_test_hg/issue/16">#16</a>. filecontent/commit message/author/node name are safe_unicode now. In addition some other __str__ are unicode as well Added test for unicode Improved test to clone into uniq repository.
--- a/kallithea/tests/functional/test_login.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/functional/test_login.py Fri Oct 02 22:46:15 2015 +0200 @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import re import time +import urlparse import mock @@ -103,20 +104,19 @@ ('data:text/html,<script>window.alert("xss")</script>',), ('mailto:test@example.com',), ('file:///etc/passwd',), - ('ftp://some.ftp.server',), - ('http://other.domain/bl%C3%A5b%C3%A6rgr%C3%B8d',), + ('ftp://ftp.example.com',), + ('http://other.example.com/bl%C3%A5b%C3%A6rgr%C3%B8d',), + ('//evil.example.com/',), + ('/\r\nX-Header-Injection: boo',), + ('/invälid_url_bytes',), + ('non-absolute-path',), ]) def test_login_bad_came_froms(self, url_came_from): response = self.app.post(url(controller='login', action='index', came_from=url_came_from), {'username': TEST_USER_ADMIN_LOGIN, - 'password': TEST_USER_ADMIN_PASS}) - self.assertEqual(response.status, '302 Found') - self.assertEqual(response._environ['paste.testing_variables'] - ['tmpl_context'].came_from, '/') - response = response.follow() - - self.assertEqual(response.status, '200 OK') + 'password': TEST_USER_ADMIN_PASS}, + status=400) def test_login_short_password(self): response = self.app.post(url(controller='login', action='index'), @@ -136,9 +136,9 @@ # verify that get arguments are correctly passed along login redirection @parameterized.expand([ - ({'foo':'one', 'bar':'two'}, ('foo=one', 'bar=two')), + ({'foo':'one', 'bar':'two'}, (('foo', 'one'), ('bar', 'two'))), ({'blue': u'blå'.encode('utf-8'), 'green':u'grøn'}, - ('blue=bl%C3%A5', 'green=gr%C3%B8n')), + (('blue', u'blå'.encode('utf-8')), ('green', u'grøn'.encode('utf-8')))), ]) def test_redirection_to_login_form_preserves_get_args(self, args, args_encoded): with fixture.anon_access(False): @@ -146,30 +146,31 @@ repo_name=HG_REPO, **args)) self.assertEqual(response.status, '302 Found') + came_from = urlparse.parse_qs(urlparse.urlparse(response.location).query)['came_from'][0] + came_from_qs = urlparse.parse_qsl(urlparse.urlparse(came_from).query) for encoded in args_encoded: - self.assertIn(encoded, response.location) + self.assertIn(encoded, came_from_qs) @parameterized.expand([ ({'foo':'one', 'bar':'two'}, ('foo=one', 'bar=two')), - ({'blue': u'blå'.encode('utf-8'), 'green':u'grøn'}, + ({'blue': u'blå', 'green':u'grøn'}, ('blue=bl%C3%A5', 'green=gr%C3%B8n')), ]) def test_login_form_preserves_get_args(self, args, args_encoded): response = self.app.get(url(controller='login', action='index', - came_from = '/_admin/users', - **args)) + came_from=url('/_admin/users', **args))) + came_from = urlparse.parse_qs(urlparse.urlparse(response.form.action).query)['came_from'][0] for encoded in args_encoded: - self.assertIn(encoded, response.form.action) + self.assertIn(encoded, came_from) @parameterized.expand([ ({'foo':'one', 'bar':'two'}, ('foo=one', 'bar=two')), - ({'blue': u'blå'.encode('utf-8'), 'green':u'grøn'}, + ({'blue': u'blå', 'green':u'grøn'}, ('blue=bl%C3%A5', 'green=gr%C3%B8n')), ]) def test_redirection_after_successful_login_preserves_get_args(self, args, args_encoded): response = self.app.post(url(controller='login', action='index', - came_from = '/_admin/users', - **args), + came_from = url('/_admin/users', **args)), {'username': TEST_USER_ADMIN_LOGIN, 'password': TEST_USER_ADMIN_PASS}) self.assertEqual(response.status, '302 Found') @@ -178,19 +179,19 @@ @parameterized.expand([ ({'foo':'one', 'bar':'two'}, ('foo=one', 'bar=two')), - ({'blue': u'blå'.encode('utf-8'), 'green':u'grøn'}, + ({'blue': u'blå', 'green':u'grøn'}, ('blue=bl%C3%A5', 'green=gr%C3%B8n')), ]) def test_login_form_after_incorrect_login_preserves_get_args(self, args, args_encoded): response = self.app.post(url(controller='login', action='index', - came_from = '/_admin/users', - **args), + came_from=url('/_admin/users', **args)), {'username': 'error', 'password': 'test12'}) response.mustcontain('Invalid username or password') + came_from = urlparse.parse_qs(urlparse.urlparse(response.form.action).query)['came_from'][0] for encoded in args_encoded: - self.assertIn(encoded, response.form.action) + self.assertIn(encoded, came_from) #========================================================================== # REGISTRATIONS @@ -205,7 +206,7 @@ {'username': uname, 'password': 'test12', 'password_confirmation': 'test12', - 'email': 'goodmail@domain.com', + 'email': 'goodmail@example.com', 'firstname': 'test', 'lastname': 'test'}) @@ -304,7 +305,7 @@ def test_register_ok(self): username = 'test_regular4' password = 'qweqwe' - email = 'username@test.com' + email = 'user4@example.com' name = 'testname' lastname = 'testlastname' @@ -348,7 +349,7 @@ username = 'test_password_reset_1' password = 'qweqwe' - email = 'username@python-works.com' + email = 'username@example.com' name = 'passwd' lastname = 'reset' timestamp = int(time.time())
--- a/kallithea/tests/functional/test_my_account.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/functional/test_my_account.py Fri Oct 02 22:46:15 2015 +0200 @@ -67,16 +67,16 @@ response.mustcontain('No additional emails specified') response = self.app.post(url('my_account_emails'), - {'new_email': 'foo@barz.com', '_authentication_token': self.authentication_token()}) + {'new_email': 'barz@example.com', '_authentication_token': self.authentication_token()}) response = self.app.get(url('my_account_emails')) from kallithea.model.db import UserEmailMap email_id = UserEmailMap.query()\ .filter(UserEmailMap.user == User.get_by_username(TEST_USER_ADMIN_LOGIN))\ - .filter(UserEmailMap.email == 'foo@barz.com').one().email_id + .filter(UserEmailMap.email == 'barz@example.com').one().email_id - response.mustcontain('foo@barz.com') + response.mustcontain('barz@example.com') response.mustcontain('<input id="del_email_id" name="del_email_id" type="hidden" value="%s" />' % email_id) response = self.app.post(url('my_account_emails'), @@ -97,7 +97,7 @@ #('extern_name', {'extern_name': None}), ('active', {'active': False}), ('active', {'active': True}), - ('email', {'email': 'some@email.com'}), + ('email', {'email': 'someemail@example.com'}), # ('new_password', {'new_password': 'foobar123', # 'password_confirmation': 'foobar123'}) ])
--- a/kallithea/tests/other/manual_test_vcs_operations.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/other/manual_test_vcs_operations.py Fri Oct 02 22:46:15 2015 +0200 @@ -112,13 +112,13 @@ for i in xrange(kwargs.get('files_no', 3)): cmd = """echo 'added_line%s' >> %s""" % (i, added_file) Command(cwd).execute(cmd) - author_str = 'User ǝɯɐᴎ <me@email.com>' + author_str = 'User ǝɯɐᴎ <me@example.com>' if vcs == 'hg': cmd = """hg commit -m 'commited new %s' -u '%s' %s """ % ( i, author_str, added_file ) elif vcs == 'git': - cmd = """EMAIL="me@email.com" git commit -m 'commited new %s' --author '%s' %s """ % ( + cmd = """EMAIL="me@example.com" git commit -m 'commited new %s' --author '%s' %s """ % ( i, author_str, added_file ) Command(cwd).execute(cmd)
--- a/kallithea/tests/other/test_libs.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/other/test_libs.py Fri Oct 02 22:46:15 2015 +0200 @@ -42,11 +42,11 @@ '%s://127.0.0.1' % proto), ('%s://127.0.0.1:8080' % proto, ['%s://' % proto, '127.0.0.1', '8080'], '%s://127.0.0.1:8080' % proto), - ('%s://domain.org' % proto, ['%s://' % proto, 'domain.org'], - '%s://domain.org' % proto), - ('%s://user:pass@domain.org:8080' % proto, ['%s://' % proto, 'domain.org', + ('%s://example.com' % proto, ['%s://' % proto, 'example.com'], + '%s://example.com' % proto), + ('%s://user:pass@example.com:8080' % proto, ['%s://' % proto, 'example.com', '8080'], - '%s://domain.org:8080' % proto), + '%s://example.com:8080' % proto), ] proto = 'https' @@ -59,11 +59,11 @@ '%s://127.0.0.1' % proto), ('%s://127.0.0.1:8080' % proto, ['%s://' % proto, '127.0.0.1', '8080'], '%s://127.0.0.1:8080' % proto), - ('%s://domain.org' % proto, ['%s://' % proto, 'domain.org'], - '%s://domain.org' % proto), - ('%s://user:pass@domain.org:8080' % proto, ['%s://' % proto, 'domain.org', + ('%s://example.com' % proto, ['%s://' % proto, 'example.com'], + '%s://example.com' % proto), + ('%s://user:pass@example.com:8080' % proto, ['%s://' % proto, 'example.com', '8080'], - '%s://domain.org:8080' % proto), + '%s://example.com:8080' % proto), ] @@ -104,11 +104,11 @@ def test_mention_extractor(self): from kallithea.lib.utils2 import extract_mentioned_users sample = ( - "@first hi there @world here's my email username@email.com " + "@first hi there @world here's my email username@example.com " "@lukaszb check @one_more22 it pls @ ttwelve @D[] @one@two@three " "@UPPER @cAmEL @2one_more22 @john please see this http://org.pl " "@marian.user just do it @marco-polo and next extract @marco_polo " - "user.dot hej ! not-needed maril@domain.org" + "user.dot hej ! not-needed maril@example.com" ) s = sorted([ @@ -184,7 +184,7 @@ def test_tag_exctrator(self): sample = ( "hello pta[tag] gog [[]] [[] sda ero[or]d [me =>>< sa]" - "[requires] [stale] [see<>=>] [see => http://url.com]" + "[requires] [stale] [see<>=>] [see => http://example.com]" "[requires => url] [lang => python] [just a tag]" "[,d] [ => ULR ] [obsolete] [desc]]" ) @@ -205,7 +205,7 @@ class fake_url(object): @classmethod def current(cls, *args, **kwargs): - return 'https://server.com' + return 'https://example.com' #mock pylons.tmpl_context def fake_tmpl_context(_url): @@ -218,35 +218,35 @@ with mock.patch('pylons.url', fake_url): - fake = fake_tmpl_context(_url='http://test.com/{email}') + fake = fake_tmpl_context(_url='http://example.com/{email}') with mock.patch('pylons.tmpl_context', fake): from pylons import url - assert url.current() == 'https://server.com' - grav = gravatar_url(email_address='test@foo.com', size=24) - assert grav == 'http://test.com/test@foo.com' + assert url.current() == 'https://example.com' + grav = gravatar_url(email_address='test@example.com', size=24) + assert grav == 'http://example.com/test@example.com' - fake = fake_tmpl_context(_url='http://test.com/{email}') + fake = fake_tmpl_context(_url='http://example.com/{email}') with mock.patch('pylons.tmpl_context', fake): - grav = gravatar_url(email_address='test@foo.com', size=24) - assert grav == 'http://test.com/test@foo.com' + grav = gravatar_url(email_address='test@example.com', size=24) + assert grav == 'http://example.com/test@example.com' - fake = fake_tmpl_context(_url='http://test.com/{md5email}') + fake = fake_tmpl_context(_url='http://example.com/{md5email}') with mock.patch('pylons.tmpl_context', fake): - em = 'test@foo.com' + em = 'test@example.com' grav = gravatar_url(email_address=em, size=24) - assert grav == 'http://test.com/%s' % (_md5(em)) + assert grav == 'http://example.com/%s' % (_md5(em)) - fake = fake_tmpl_context(_url='http://test.com/{md5email}/{size}') + fake = fake_tmpl_context(_url='http://example.com/{md5email}/{size}') with mock.patch('pylons.tmpl_context', fake): - em = 'test@foo.com' + em = 'test@example.com' grav = gravatar_url(email_address=em, size=24) - assert grav == 'http://test.com/%s/%s' % (_md5(em), 24) + assert grav == 'http://example.com/%s/%s' % (_md5(em), 24) fake = fake_tmpl_context(_url='{scheme}://{netloc}/{md5email}/{size}') with mock.patch('pylons.tmpl_context', fake): - em = 'test@foo.com' + em = 'test@example.com' grav = gravatar_url(email_address=em, size=24) - assert grav == 'https://server.com/%s/%s' % (_md5(em), 24) + assert grav == 'https://example.com/%s/%s' % (_md5(em), 24) @parameterized.expand([ (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '', 'http://vps1:8000/group/repo1'), @@ -260,9 +260,9 @@ ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://username@vps1:8000/_23'), ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://username@vps1:8000/_23'), ('http://{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://vps1:8000/_23'), - ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://username@proxy1.server.com/group/repo1'), - ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.server.com/group/repo1'), - ('https://proxy1.server.com/{user}/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://proxy1.server.com/username/group/repo1'), + ('https://{user}@proxy1.example.com/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://username@proxy1.example.com/group/repo1'), + ('https://{user}@proxy1.example.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.example.com/group/repo1'), + ('https://proxy1.example.com/{user}/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://proxy1.example.com/username/group/repo1'), ]) def test_clone_url_generator(self, tmpl, repo_name, overrides, prefix, expected): from kallithea.lib.utils2 import get_clone_url @@ -337,12 +337,12 @@ "from rev a also rev url[http://google.com]", "http://google.com"), ("""Multi line - https://foo.bar.com + https://foo.bar.example.com some text lalala""", """Multi line - url[https://foo.bar.com] + url[https://foo.bar.example.com] some text lalala""", - "https://foo.bar.com") + "https://foo.bar.example.com") ]) def test_urlify_test(self, sample, expected, url_): from kallithea.lib.helpers import urlify_text
--- a/kallithea/tests/scripts/manual_test_concurrency.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/scripts/manual_test_concurrency.py Fri Oct 02 22:46:15 2015 +0200 @@ -107,7 +107,7 @@ new_usr = User() new_usr.username = USER new_usr.password = get_crypt_password(PASS) - new_usr.email = 'mail@mail.com' + new_usr.email = 'mail@example.com' new_usr.name = 'test' new_usr.lastname = 'lasttestname' new_usr.active = True
--- a/kallithea/tests/test.ini Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/test.ini Fri Oct 02 22:46:15 2015 +0200 @@ -56,7 +56,7 @@ ## SMTP server settings ## Only smtp_server is mandatory. All other settings take the specified default ## values. -#smtp_server = mail.server.com +#smtp_server = smtp.example.com #smtp_username = #smtp_password = #smtp_port = 25 @@ -228,8 +228,8 @@ ## gist URL alias, used to create nicer urls for gist. This should be an ## url that does rewrites to _admin/gists/<gistid>. -## example: http://gist.kallithea.server/{gistid}. Empty means use the internal -## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid> +## example: http://gist.example.com/{gistid}. Empty means use the internal +## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid> gist_alias_url = ## white list of API enabled controllers. This allows to add list of @@ -264,7 +264,7 @@ ## fetched from the regex and {repo} is replaced with full repository name ## including groups {repo_name} is replaced with just name of repo -issue_server_link = https://myissueserver.com/{repo}/issue/{id} +issue_server_link = https://issues.example.com/{repo}/issue/{id} ## prefix to add to link to indicate it's an url ## #314 will be replaced by <issue_prefix><id> @@ -274,10 +274,10 @@ ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify ## multiple patterns, to other issues server, wiki or others ## below an example how to create a wiki pattern -# wiki-some-id -> https://mywiki.com/some-id +# wiki-some-id -> https://wiki.example.com/some-id #issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://mywiki.com/{id} +#issue_server_link_wiki = https://wiki.example.com/{id} #issue_prefix_wiki = WIKI- ## instance-id prefix
--- a/kallithea/tests/vcs/test_utils.py Tue Sep 08 10:56:22 2015 +0000 +++ b/kallithea/tests/vcs/test_utils.py Fri Oct 02 22:46:15 2015 +0200 @@ -184,26 +184,26 @@ class TestAuthorExtractors(unittest.TestCase): - TEST_AUTHORS = [("Username Last'o'Name <username@python-works.com>", - ("Username Last'o'Name", "username@python-works.com")), - ("Username Last'o'Name Spaces < username@python-works.com >", - ("Username Last'o'Name Spaces", "username@python-works.com")), - ("Username Last'o'Name <username.lastname@python-works.com>", - ("Username Last'o'Name", "username.lastname@python-works.com")), - ('mrf RFC_SPEC <username+lastname@python-works.com>', - ('mrf RFC_SPEC', 'username+lastname@python-works.com')), - ('username <user@email.com>', - ('username', 'user@email.com')), - ('username <user@email.com', - ('username', 'user@email.com')), - ('broken missing@email.com', - ('broken', 'missing@email.com')), - ('<justemail@mail.com>', - ('', 'justemail@mail.com')), + TEST_AUTHORS = [("Username Last'o'Name <username@example.com>", + ("Username Last'o'Name", "username@example.com")), + ("Username Last'o'Name Spaces < username@example.com >", + ("Username Last'o'Name Spaces", "username@example.com")), + ("Username Last'o'Name <username.lastname@example.com>", + ("Username Last'o'Name", "username.lastname@example.com")), + ('mrf RFC_SPEC <username+lastname@example.com>', + ('mrf RFC_SPEC', 'username+lastname@example.com')), + ('username <user@example.com>', + ('username', 'user@example.com')), + ('username <user@example.com', + ('username', 'user@example.com')), + ('broken missing@example.com', + ('broken', 'missing@example.com')), + ('<justemail@example.com>', + ('', 'justemail@example.com')), ('justname', ('justname', '')), - ('Mr Double Name withemail@email.com ', - ('Mr Double Name', 'withemail@email.com')), + ('Mr Double Name withemail@example.com ', + ('Mr Double Name', 'withemail@example.com')), ] def test_author_email(self):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/make-release Fri Oct 02 22:46:15 2015 +0200 @@ -0,0 +1,63 @@ +#!/bin/bash +set -e +set -x + +echo "Checking tools needed for uploading stuff" +pip freeze | grep '^Sphinx==' || pip install Sphinx +pip freeze | grep '^Sphinx-PyPI-upload==' || pip install Sphinx-PyPI-upload + +echo "Verifying everything can build" +hg purge --all dist +python2 setup.py build_sphinx +python2 setup.py compile_catalog # TODO: check for errors +python2 setup.py sdist + +echo "Verifying VERSION from kallithea/__init__.py" +namerel=$(cd dist && echo Kallithea-*.tar.gz) +namerel=${namerel%.tar.gz} +version=${namerel#Kallithea-} +echo "Releasing Kallithea $version in directory $namerel" +echo "Verifying current revision is tagged for $version" +hg log -r "'$version'&." | grep . + +echo "Cleaning before making release build" +hg up -c . +hg revert -a -r null +hg up -C "'$version'&." +hg purge --all + +echo "Building dist file" +python2 setup.py compile_catalog +python2 setup.py sdist + +echo "Verifying dist file content" +tar tf dist/Kallithea-*.tar.gz | sed "s|^$namerel/||" | LANG=C sort > scripts/manifest +hg diff +hg up -c . # fail if manifest changed + +echo "Now, make sure" +echo "* the copyright and contributor lists have been updated" +echo "* all tests are passing" +echo "* release note is ready" +echo "* announcement is ready" +echo "* source has been pushed to https://kallithea-scm.org/repos/kallithea" +echo + +echo -n "Enter \"pypi\" to upload Kallithea $version to pypi: " +read answer +[ "$answer" = "pypi" ] +extraargs=${EMAIL:+--identity=$EMAIL} +python2 setup.py sdist upload --sign $extraargs +xdg-open https://pypi.python.org/pypi/Kallithea + +echo "Uploading docs to pypi" +# See https://wiki.python.org/moin/PyPiDocumentationHosting +python2 setup.py build_sphinx upload_sphinx +xdg-open https://pythonhosted.org/Kallithea/ +xdg-open http://packages.python.org/Kallithea/installation.html + +echo "Rebuilding readthedocs for docs.kallithea-scm.org" +xdg-open https://readthedocs.org/projects/kallithea/ +curl -X POST http://readthedocs.org/build/kallithea +xdg-open https://readthedocs.org/builds/kallithea/ +xdg-open http://docs.kallithea-scm.org/en/latest/ # or whatever the branch is
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/manifest Fri Oct 02 22:46:15 2015 +0200 @@ -0,0 +1,952 @@ + +Apache-License-2.0.txt +CONTRIBUTORS +COPYING +Kallithea.egg-info/ +Kallithea.egg-info/PKG-INFO +Kallithea.egg-info/SOURCES.txt +Kallithea.egg-info/dependency_links.txt +Kallithea.egg-info/entry_points.txt +Kallithea.egg-info/not-zip-safe +Kallithea.egg-info/paster_plugins.txt +Kallithea.egg-info/requires.txt +Kallithea.egg-info/top_level.txt +LICENSE-MERGELY.html +LICENSE.md +MANIFEST.in +MIT-Permissive-License.txt +PKG-INFO +README.rst +development.ini +docs/ +docs/Makefile +docs/api/ +docs/api/api.rst +docs/api/models.rst +docs/changelog.rst +docs/conf.py +docs/contributing.rst +docs/images/ +docs/images/.img +docs/index.rst +docs/installation.rst +docs/installation_iis.rst +docs/installation_puppet.rst +docs/installation_win.rst +docs/installation_win_old.rst +docs/make.bat +docs/overview.rst +docs/readme.rst +docs/setup.rst +docs/theme/ +docs/theme/nature/ +docs/theme/nature/layout.html +docs/theme/nature/static/ +docs/theme/nature/static/kallithea-logo.svg +docs/theme/nature/static/nature.css_t +docs/theme/nature/static/pygments.css +docs/theme/nature/theme.conf +docs/usage/ +docs/usage/backup.rst +docs/usage/debugging.rst +docs/usage/email.rst +docs/usage/general.rst +docs/usage/locking.rst +docs/usage/performance.rst +docs/usage/statistics.rst +docs/usage/troubleshooting.rst +docs/usage/vcs_support.rst +init.d/ +init.d/celeryd-upstart.conf +init.d/kallithea-daemon-arch +init.d/kallithea-daemon-debian +init.d/kallithea-daemon-gentoo +init.d/kallithea-daemon-redhat +init.d/kallithea-upstart.conf +init.d/supervisord.conf +kallithea/ +kallithea/__init__.py +kallithea/bin/ +kallithea/bin/__init__.py +kallithea/bin/base.py +kallithea/bin/kallithea_api.py +kallithea/bin/kallithea_backup.py +kallithea/bin/kallithea_config.py +kallithea/bin/kallithea_gist.py +kallithea/bin/ldap_sync.conf +kallithea/bin/ldap_sync.py +kallithea/bin/rebranddb.py +kallithea/bin/template.ini.mako +kallithea/config/ +kallithea/config/__init__.py +kallithea/config/conf.py +kallithea/config/deployment.ini_tmpl +kallithea/config/environment.py +kallithea/config/middleware.py +kallithea/config/post_receive_tmpl.py +kallithea/config/pre_receive_tmpl.py +kallithea/config/rcextensions/ +kallithea/config/rcextensions/__init__.py +kallithea/config/routing.py +kallithea/controllers/ +kallithea/controllers/__init__.py +kallithea/controllers/admin/ +kallithea/controllers/admin/__init__.py +kallithea/controllers/admin/admin.py +kallithea/controllers/admin/auth_settings.py +kallithea/controllers/admin/defaults.py +kallithea/controllers/admin/gists.py +kallithea/controllers/admin/my_account.py +kallithea/controllers/admin/notifications.py +kallithea/controllers/admin/permissions.py +kallithea/controllers/admin/repo_groups.py +kallithea/controllers/admin/repos.py +kallithea/controllers/admin/settings.py +kallithea/controllers/admin/user_groups.py +kallithea/controllers/admin/users.py +kallithea/controllers/api/ +kallithea/controllers/api/__init__.py +kallithea/controllers/api/api.py +kallithea/controllers/bookmarks.py +kallithea/controllers/branches.py +kallithea/controllers/changelog.py +kallithea/controllers/changeset.py +kallithea/controllers/compare.py +kallithea/controllers/error.py +kallithea/controllers/feed.py +kallithea/controllers/files.py +kallithea/controllers/followers.py +kallithea/controllers/forks.py +kallithea/controllers/home.py +kallithea/controllers/journal.py +kallithea/controllers/login.py +kallithea/controllers/pullrequests.py +kallithea/controllers/search.py +kallithea/controllers/summary.py +kallithea/controllers/tags.py +kallithea/i18n/ +kallithea/i18n/be/ +kallithea/i18n/be/LC_MESSAGES/ +kallithea/i18n/be/LC_MESSAGES/kallithea.mo +kallithea/i18n/be/LC_MESSAGES/kallithea.po +kallithea/i18n/cs/ +kallithea/i18n/cs/LC_MESSAGES/ +kallithea/i18n/cs/LC_MESSAGES/kallithea.mo +kallithea/i18n/cs/LC_MESSAGES/kallithea.po +kallithea/i18n/de/ +kallithea/i18n/de/LC_MESSAGES/ +kallithea/i18n/de/LC_MESSAGES/kallithea.mo +kallithea/i18n/de/LC_MESSAGES/kallithea.po +kallithea/i18n/en/ +kallithea/i18n/en/LC_MESSAGES/ +kallithea/i18n/en/LC_MESSAGES/kallithea.mo +kallithea/i18n/fr/ +kallithea/i18n/fr/LC_MESSAGES/ +kallithea/i18n/fr/LC_MESSAGES/kallithea.mo +kallithea/i18n/fr/LC_MESSAGES/kallithea.po +kallithea/i18n/how_to +kallithea/i18n/hu/ +kallithea/i18n/hu/LC_MESSAGES/ +kallithea/i18n/hu/LC_MESSAGES/kallithea.mo +kallithea/i18n/hu/LC_MESSAGES/kallithea.po +kallithea/i18n/ja/ +kallithea/i18n/ja/LC_MESSAGES/ +kallithea/i18n/ja/LC_MESSAGES/kallithea.mo +kallithea/i18n/ja/LC_MESSAGES/kallithea.po +kallithea/i18n/kallithea.pot +kallithea/i18n/nl_BE/ +kallithea/i18n/nl_BE/LC_MESSAGES/ +kallithea/i18n/nl_BE/LC_MESSAGES/kallithea.mo +kallithea/i18n/nl_BE/LC_MESSAGES/kallithea.po +kallithea/i18n/pl/ +kallithea/i18n/pl/LC_MESSAGES/ +kallithea/i18n/pl/LC_MESSAGES/kallithea.mo +kallithea/i18n/pl/LC_MESSAGES/kallithea.po +kallithea/i18n/pt_BR/ +kallithea/i18n/pt_BR/LC_MESSAGES/ +kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.mo +kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.po +kallithea/i18n/ru/ +kallithea/i18n/ru/LC_MESSAGES/ +kallithea/i18n/ru/LC_MESSAGES/kallithea.mo +kallithea/i18n/ru/LC_MESSAGES/kallithea.po +kallithea/i18n/sk/ +kallithea/i18n/sk/LC_MESSAGES/ +kallithea/i18n/sk/LC_MESSAGES/kallithea.mo +kallithea/i18n/sk/LC_MESSAGES/kallithea.po +kallithea/i18n/zh_CN/ +kallithea/i18n/zh_CN/LC_MESSAGES/ +kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.mo +kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.po +kallithea/i18n/zh_TW/ +kallithea/i18n/zh_TW/LC_MESSAGES/ +kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.mo +kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.po +kallithea/lib/ +kallithea/lib/__init__.py +kallithea/lib/annotate.py +kallithea/lib/app_globals.py +kallithea/lib/auth.py +kallithea/lib/auth_modules/ +kallithea/lib/auth_modules/__init__.py +kallithea/lib/auth_modules/auth_container.py +kallithea/lib/auth_modules/auth_crowd.py +kallithea/lib/auth_modules/auth_internal.py +kallithea/lib/auth_modules/auth_ldap.py +kallithea/lib/auth_modules/auth_pam.py +kallithea/lib/base.py +kallithea/lib/caching_query.py +kallithea/lib/celerylib/ +kallithea/lib/celerylib/__init__.py +kallithea/lib/celerylib/tasks.py +kallithea/lib/celerypylons/ +kallithea/lib/celerypylons/__init__.py +kallithea/lib/celerypylons/commands.py +kallithea/lib/celerypylons/loader.py +kallithea/lib/colored_formatter.py +kallithea/lib/compat.py +kallithea/lib/db_manage.py +kallithea/lib/dbmigrate/ +kallithea/lib/dbmigrate/__init__.py +kallithea/lib/dbmigrate/migrate.cfg +kallithea/lib/dbmigrate/migrate/ +kallithea/lib/dbmigrate/migrate/__init__.py +kallithea/lib/dbmigrate/migrate/changeset/ +kallithea/lib/dbmigrate/migrate/changeset/__init__.py +kallithea/lib/dbmigrate/migrate/changeset/ansisql.py +kallithea/lib/dbmigrate/migrate/changeset/constraint.py +kallithea/lib/dbmigrate/migrate/changeset/databases/ +kallithea/lib/dbmigrate/migrate/changeset/databases/__init__.py +kallithea/lib/dbmigrate/migrate/changeset/databases/firebird.py +kallithea/lib/dbmigrate/migrate/changeset/databases/mysql.py +kallithea/lib/dbmigrate/migrate/changeset/databases/oracle.py +kallithea/lib/dbmigrate/migrate/changeset/databases/postgres.py +kallithea/lib/dbmigrate/migrate/changeset/databases/sqlite.py +kallithea/lib/dbmigrate/migrate/changeset/databases/visitor.py +kallithea/lib/dbmigrate/migrate/changeset/schema.py +kallithea/lib/dbmigrate/migrate/exceptions.py +kallithea/lib/dbmigrate/migrate/versioning/ +kallithea/lib/dbmigrate/migrate/versioning/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/api.py +kallithea/lib/dbmigrate/migrate/versioning/cfgparse.py +kallithea/lib/dbmigrate/migrate/versioning/config.py +kallithea/lib/dbmigrate/migrate/versioning/genmodel.py +kallithea/lib/dbmigrate/migrate/versioning/migrate_repository.py +kallithea/lib/dbmigrate/migrate/versioning/pathed.py +kallithea/lib/dbmigrate/migrate/versioning/repository.py +kallithea/lib/dbmigrate/migrate/versioning/schema.py +kallithea/lib/dbmigrate/migrate/versioning/schemadiff.py +kallithea/lib/dbmigrate/migrate/versioning/script/ +kallithea/lib/dbmigrate/migrate/versioning/script/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/script/base.py +kallithea/lib/dbmigrate/migrate/versioning/script/py.py +kallithea/lib/dbmigrate/migrate/versioning/script/sql.py +kallithea/lib/dbmigrate/migrate/versioning/shell.py +kallithea/lib/dbmigrate/migrate/versioning/template.py +kallithea/lib/dbmigrate/migrate/versioning/templates/ +kallithea/lib/dbmigrate/migrate/versioning/templates/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/manage.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/manage/ +kallithea/lib/dbmigrate/migrate/versioning/templates/manage/default.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/manage/pylons.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/ +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/ +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/README +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/migrate.cfg +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/versions/ +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/default/versions/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/ +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/README +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/migrate.cfg +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/versions/ +kallithea/lib/dbmigrate/migrate/versioning/templates/repository/pylons/versions/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/script/ +kallithea/lib/dbmigrate/migrate/versioning/templates/script/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/templates/script/default.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/script/pylons.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/sql_script/ +kallithea/lib/dbmigrate/migrate/versioning/templates/sql_script/default.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/templates/sql_script/pylons.py_tmpl +kallithea/lib/dbmigrate/migrate/versioning/util/ +kallithea/lib/dbmigrate/migrate/versioning/util/__init__.py +kallithea/lib/dbmigrate/migrate/versioning/util/importpath.py +kallithea/lib/dbmigrate/migrate/versioning/util/keyedinstance.py +kallithea/lib/dbmigrate/migrate/versioning/version.py +kallithea/lib/dbmigrate/schema/ +kallithea/lib/dbmigrate/schema/__init__.py +kallithea/lib/dbmigrate/schema/db_1_1_0.py +kallithea/lib/dbmigrate/schema/db_1_2_0.py +kallithea/lib/dbmigrate/schema/db_1_3_0.py +kallithea/lib/dbmigrate/schema/db_1_4_0.py +kallithea/lib/dbmigrate/schema/db_1_5_0.py +kallithea/lib/dbmigrate/schema/db_1_5_2.py +kallithea/lib/dbmigrate/schema/db_1_6_0.py +kallithea/lib/dbmigrate/schema/db_1_7_0.py +kallithea/lib/dbmigrate/schema/db_1_8_0.py +kallithea/lib/dbmigrate/schema/db_2_0_0.py +kallithea/lib/dbmigrate/schema/db_2_0_1.py +kallithea/lib/dbmigrate/schema/db_2_0_2.py +kallithea/lib/dbmigrate/schema/db_2_1_0.py +kallithea/lib/dbmigrate/schema/db_2_2_0.py +kallithea/lib/dbmigrate/schema/db_2_2_3.py +kallithea/lib/dbmigrate/versions/ +kallithea/lib/dbmigrate/versions/001_initial_release.py +kallithea/lib/dbmigrate/versions/002_version_1_1_0.py +kallithea/lib/dbmigrate/versions/003_version_1_2_0.py +kallithea/lib/dbmigrate/versions/004_version_1_3_0.py +kallithea/lib/dbmigrate/versions/005_version_1_3_0.py +kallithea/lib/dbmigrate/versions/006_version_1_4_0.py +kallithea/lib/dbmigrate/versions/007_version_1_4_0.py +kallithea/lib/dbmigrate/versions/008_version_1_5_0.py +kallithea/lib/dbmigrate/versions/009_version_1_5_1.py +kallithea/lib/dbmigrate/versions/010_version_1_5_2.py +kallithea/lib/dbmigrate/versions/011_version_1_6_0.py +kallithea/lib/dbmigrate/versions/012_version_1_7_0.py +kallithea/lib/dbmigrate/versions/013_version_1_7_0.py +kallithea/lib/dbmigrate/versions/014_version_1_7_1.py +kallithea/lib/dbmigrate/versions/015_version_1_8_0.py +kallithea/lib/dbmigrate/versions/016_version_2_0_0.py +kallithea/lib/dbmigrate/versions/017_version_2_0_0.py +kallithea/lib/dbmigrate/versions/018_version_2_0_0.py +kallithea/lib/dbmigrate/versions/019_version_2_0_0.py +kallithea/lib/dbmigrate/versions/020_version_2_0_1.py +kallithea/lib/dbmigrate/versions/021_version_2_0_2.py +kallithea/lib/dbmigrate/versions/022_version_2_0_2.py +kallithea/lib/dbmigrate/versions/023_version_2_1_0.py +kallithea/lib/dbmigrate/versions/024_version_2_1_0.py +kallithea/lib/dbmigrate/versions/025_version_2_1_0.py +kallithea/lib/dbmigrate/versions/026_version_2_2_0.py +kallithea/lib/dbmigrate/versions/027_version_2_2_0.py +kallithea/lib/dbmigrate/versions/028_version_2_2_3.py +kallithea/lib/dbmigrate/versions/029_version_2_2_3.py +kallithea/lib/dbmigrate/versions/030_version_2_2_3.py +kallithea/lib/dbmigrate/versions/031_version_2_2_3.py +kallithea/lib/dbmigrate/versions/__init__.py +kallithea/lib/diffs.py +kallithea/lib/exceptions.py +kallithea/lib/ext_json.py +kallithea/lib/graphmod.py +kallithea/lib/helpers.py +kallithea/lib/hooks.py +kallithea/lib/indexers/ +kallithea/lib/indexers/__init__.py +kallithea/lib/indexers/daemon.py +kallithea/lib/ipaddr.py +kallithea/lib/markup_renderer.py +kallithea/lib/middleware/ +kallithea/lib/middleware/__init__.py +kallithea/lib/middleware/errormator.py +kallithea/lib/middleware/https_fixup.py +kallithea/lib/middleware/pygrack.py +kallithea/lib/middleware/sentry.py +kallithea/lib/middleware/sessionmiddleware.py +kallithea/lib/middleware/simplegit.py +kallithea/lib/middleware/simplehg.py +kallithea/lib/middleware/wrapper.py +kallithea/lib/paster_commands/ +kallithea/lib/paster_commands/__init__.py +kallithea/lib/paster_commands/cache_keys.py +kallithea/lib/paster_commands/cleanup.py +kallithea/lib/paster_commands/install_iis.py +kallithea/lib/paster_commands/ishell.py +kallithea/lib/paster_commands/make_index.py +kallithea/lib/paster_commands/make_rcextensions.py +kallithea/lib/paster_commands/repo_scan.py +kallithea/lib/paster_commands/setup_db.py +kallithea/lib/paster_commands/update_repoinfo.py +kallithea/lib/pidlock.py +kallithea/lib/profiler.py +kallithea/lib/rcmail/ +kallithea/lib/rcmail/__init__.py +kallithea/lib/rcmail/exceptions.py +kallithea/lib/rcmail/message.py +kallithea/lib/rcmail/response.py +kallithea/lib/rcmail/smtp_mailer.py +kallithea/lib/rcmail/utils.py +kallithea/lib/recaptcha.py +kallithea/lib/timerproxy.py +kallithea/lib/utils.py +kallithea/lib/utils2.py +kallithea/lib/vcs/ +kallithea/lib/vcs/__init__.py +kallithea/lib/vcs/backends/ +kallithea/lib/vcs/backends/__init__.py +kallithea/lib/vcs/backends/base.py +kallithea/lib/vcs/backends/git/ +kallithea/lib/vcs/backends/git/__init__.py +kallithea/lib/vcs/backends/git/changeset.py +kallithea/lib/vcs/backends/git/inmemory.py +kallithea/lib/vcs/backends/git/repository.py +kallithea/lib/vcs/backends/git/workdir.py +kallithea/lib/vcs/backends/hg/ +kallithea/lib/vcs/backends/hg/__init__.py +kallithea/lib/vcs/backends/hg/changeset.py +kallithea/lib/vcs/backends/hg/inmemory.py +kallithea/lib/vcs/backends/hg/repository.py +kallithea/lib/vcs/backends/hg/workdir.py +kallithea/lib/vcs/conf/ +kallithea/lib/vcs/conf/__init__.py +kallithea/lib/vcs/conf/settings.py +kallithea/lib/vcs/exceptions.py +kallithea/lib/vcs/nodes.py +kallithea/lib/vcs/subprocessio.py +kallithea/lib/vcs/utils/ +kallithea/lib/vcs/utils/__init__.py +kallithea/lib/vcs/utils/annotate.py +kallithea/lib/vcs/utils/archivers.py +kallithea/lib/vcs/utils/baseui_config.py +kallithea/lib/vcs/utils/compat.py +kallithea/lib/vcs/utils/diffs.py +kallithea/lib/vcs/utils/fakemod.py +kallithea/lib/vcs/utils/filesize.py +kallithea/lib/vcs/utils/helpers.py +kallithea/lib/vcs/utils/hgcompat.py +kallithea/lib/vcs/utils/imports.py +kallithea/lib/vcs/utils/lazy.py +kallithea/lib/vcs/utils/lockfiles.py +kallithea/lib/vcs/utils/ordered_dict.py +kallithea/lib/vcs/utils/paths.py +kallithea/lib/vcs/utils/progressbar.py +kallithea/lib/vcs/utils/termcolors.py +kallithea/lib/verlib.py +kallithea/model/ +kallithea/model/__init__.py +kallithea/model/api_key.py +kallithea/model/changeset_status.py +kallithea/model/comment.py +kallithea/model/db.py +kallithea/model/forms.py +kallithea/model/gist.py +kallithea/model/meta.py +kallithea/model/notification.py +kallithea/model/permission.py +kallithea/model/pull_request.py +kallithea/model/repo.py +kallithea/model/repo_group.py +kallithea/model/repo_permission.py +kallithea/model/scm.py +kallithea/model/user.py +kallithea/model/user_group.py +kallithea/model/validators.py +kallithea/public/ +kallithea/public/codemirror/ +kallithea/public/codemirror/LICENSE +kallithea/public/codemirror/lib/ +kallithea/public/codemirror/lib/codemirror.css +kallithea/public/codemirror/lib/codemirror.js +kallithea/public/codemirror/mode/ +kallithea/public/codemirror/mode/apl/ +kallithea/public/codemirror/mode/apl/apl.js +kallithea/public/codemirror/mode/asterisk/ +kallithea/public/codemirror/mode/asterisk/asterisk.js +kallithea/public/codemirror/mode/clike/ +kallithea/public/codemirror/mode/clike/clike.js +kallithea/public/codemirror/mode/clojure/ +kallithea/public/codemirror/mode/clojure/clojure.js +kallithea/public/codemirror/mode/cobol/ +kallithea/public/codemirror/mode/cobol/cobol.js +kallithea/public/codemirror/mode/coffeescript/ +kallithea/public/codemirror/mode/coffeescript/coffeescript.js +kallithea/public/codemirror/mode/commonlisp/ +kallithea/public/codemirror/mode/commonlisp/commonlisp.js +kallithea/public/codemirror/mode/css/ +kallithea/public/codemirror/mode/css/css.js +kallithea/public/codemirror/mode/css/less_test.js +kallithea/public/codemirror/mode/css/scss_test.js +kallithea/public/codemirror/mode/cypher/ +kallithea/public/codemirror/mode/cypher/cypher.js +kallithea/public/codemirror/mode/d/ +kallithea/public/codemirror/mode/d/d.js +kallithea/public/codemirror/mode/diff/ +kallithea/public/codemirror/mode/diff/diff.js +kallithea/public/codemirror/mode/django/ +kallithea/public/codemirror/mode/django/django.js +kallithea/public/codemirror/mode/dtd/ +kallithea/public/codemirror/mode/dtd/dtd.js +kallithea/public/codemirror/mode/dylan/ +kallithea/public/codemirror/mode/dylan/dylan.js +kallithea/public/codemirror/mode/ecl/ +kallithea/public/codemirror/mode/ecl/ecl.js +kallithea/public/codemirror/mode/eiffel/ +kallithea/public/codemirror/mode/eiffel/eiffel.js +kallithea/public/codemirror/mode/erlang/ +kallithea/public/codemirror/mode/erlang/erlang.js +kallithea/public/codemirror/mode/fortran/ +kallithea/public/codemirror/mode/fortran/fortran.js +kallithea/public/codemirror/mode/gas/ +kallithea/public/codemirror/mode/gas/gas.js +kallithea/public/codemirror/mode/gfm/ +kallithea/public/codemirror/mode/gfm/gfm.js +kallithea/public/codemirror/mode/gherkin/ +kallithea/public/codemirror/mode/gherkin/gherkin.js +kallithea/public/codemirror/mode/go/ +kallithea/public/codemirror/mode/go/go.js +kallithea/public/codemirror/mode/groovy/ +kallithea/public/codemirror/mode/groovy/groovy.js +kallithea/public/codemirror/mode/haml/ +kallithea/public/codemirror/mode/haml/haml.js +kallithea/public/codemirror/mode/haskell/ +kallithea/public/codemirror/mode/haskell/haskell.js +kallithea/public/codemirror/mode/haxe/ +kallithea/public/codemirror/mode/haxe/haxe.js +kallithea/public/codemirror/mode/htmlembedded/ +kallithea/public/codemirror/mode/htmlembedded/htmlembedded.js +kallithea/public/codemirror/mode/htmlmixed/ +kallithea/public/codemirror/mode/htmlmixed/htmlmixed.js +kallithea/public/codemirror/mode/http/ +kallithea/public/codemirror/mode/http/http.js +kallithea/public/codemirror/mode/jade/ +kallithea/public/codemirror/mode/jade/jade.js +kallithea/public/codemirror/mode/javascript/ +kallithea/public/codemirror/mode/javascript/javascript.js +kallithea/public/codemirror/mode/jinja2/ +kallithea/public/codemirror/mode/jinja2/jinja2.js +kallithea/public/codemirror/mode/julia/ +kallithea/public/codemirror/mode/julia/julia.js +kallithea/public/codemirror/mode/kotlin/ +kallithea/public/codemirror/mode/kotlin/kotlin.js +kallithea/public/codemirror/mode/livescript/ +kallithea/public/codemirror/mode/livescript/livescript.js +kallithea/public/codemirror/mode/lua/ +kallithea/public/codemirror/mode/lua/lua.js +kallithea/public/codemirror/mode/markdown/ +kallithea/public/codemirror/mode/markdown/markdown.js +kallithea/public/codemirror/mode/meta.js +kallithea/public/codemirror/mode/mirc/ +kallithea/public/codemirror/mode/mirc/mirc.js +kallithea/public/codemirror/mode/mllike/ +kallithea/public/codemirror/mode/mllike/mllike.js +kallithea/public/codemirror/mode/modelica/ +kallithea/public/codemirror/mode/modelica/modelica.js +kallithea/public/codemirror/mode/nginx/ +kallithea/public/codemirror/mode/nginx/nginx.js +kallithea/public/codemirror/mode/ntriples/ +kallithea/public/codemirror/mode/ntriples/ntriples.js +kallithea/public/codemirror/mode/octave/ +kallithea/public/codemirror/mode/octave/octave.js +kallithea/public/codemirror/mode/pascal/ +kallithea/public/codemirror/mode/pascal/pascal.js +kallithea/public/codemirror/mode/pegjs/ +kallithea/public/codemirror/mode/pegjs/pegjs.js +kallithea/public/codemirror/mode/perl/ +kallithea/public/codemirror/mode/perl/perl.js +kallithea/public/codemirror/mode/php/ +kallithea/public/codemirror/mode/php/php.js +kallithea/public/codemirror/mode/pig/ +kallithea/public/codemirror/mode/pig/pig.js +kallithea/public/codemirror/mode/properties/ +kallithea/public/codemirror/mode/properties/properties.js +kallithea/public/codemirror/mode/puppet/ +kallithea/public/codemirror/mode/puppet/puppet.js +kallithea/public/codemirror/mode/python/ +kallithea/public/codemirror/mode/python/python.js +kallithea/public/codemirror/mode/q/ +kallithea/public/codemirror/mode/q/q.js +kallithea/public/codemirror/mode/r/ +kallithea/public/codemirror/mode/r/r.js +kallithea/public/codemirror/mode/rpm/ +kallithea/public/codemirror/mode/rpm/rpm.js +kallithea/public/codemirror/mode/rst/ +kallithea/public/codemirror/mode/rst/rst.js +kallithea/public/codemirror/mode/ruby/ +kallithea/public/codemirror/mode/ruby/ruby.js +kallithea/public/codemirror/mode/rust/ +kallithea/public/codemirror/mode/rust/rust.js +kallithea/public/codemirror/mode/sass/ +kallithea/public/codemirror/mode/sass/sass.js +kallithea/public/codemirror/mode/scheme/ +kallithea/public/codemirror/mode/scheme/scheme.js +kallithea/public/codemirror/mode/shell/ +kallithea/public/codemirror/mode/shell/shell.js +kallithea/public/codemirror/mode/sieve/ +kallithea/public/codemirror/mode/sieve/sieve.js +kallithea/public/codemirror/mode/slim/ +kallithea/public/codemirror/mode/slim/slim.js +kallithea/public/codemirror/mode/smalltalk/ +kallithea/public/codemirror/mode/smalltalk/smalltalk.js +kallithea/public/codemirror/mode/smarty/ +kallithea/public/codemirror/mode/smarty/smarty.js +kallithea/public/codemirror/mode/smartymixed/ +kallithea/public/codemirror/mode/smartymixed/smartymixed.js +kallithea/public/codemirror/mode/solr/ +kallithea/public/codemirror/mode/solr/solr.js +kallithea/public/codemirror/mode/sparql/ +kallithea/public/codemirror/mode/sparql/sparql.js +kallithea/public/codemirror/mode/sql/ +kallithea/public/codemirror/mode/sql/sql.js +kallithea/public/codemirror/mode/stex/ +kallithea/public/codemirror/mode/stex/stex.js +kallithea/public/codemirror/mode/tcl/ +kallithea/public/codemirror/mode/tcl/tcl.js +kallithea/public/codemirror/mode/textile/ +kallithea/public/codemirror/mode/textile/textile.js +kallithea/public/codemirror/mode/tiddlywiki/ +kallithea/public/codemirror/mode/tiddlywiki/tiddlywiki.css +kallithea/public/codemirror/mode/tiddlywiki/tiddlywiki.js +kallithea/public/codemirror/mode/tiki/ +kallithea/public/codemirror/mode/tiki/tiki.css +kallithea/public/codemirror/mode/tiki/tiki.js +kallithea/public/codemirror/mode/toml/ +kallithea/public/codemirror/mode/toml/toml.js +kallithea/public/codemirror/mode/tornado/ +kallithea/public/codemirror/mode/tornado/tornado.js +kallithea/public/codemirror/mode/turtle/ +kallithea/public/codemirror/mode/turtle/turtle.js +kallithea/public/codemirror/mode/vb/ +kallithea/public/codemirror/mode/vb/vb.js +kallithea/public/codemirror/mode/vbscript/ +kallithea/public/codemirror/mode/vbscript/vbscript.js +kallithea/public/codemirror/mode/velocity/ +kallithea/public/codemirror/mode/velocity/velocity.js +kallithea/public/codemirror/mode/verilog/ +kallithea/public/codemirror/mode/verilog/verilog.js +kallithea/public/codemirror/mode/xml/ +kallithea/public/codemirror/mode/xml/xml.js +kallithea/public/codemirror/mode/xquery/ +kallithea/public/codemirror/mode/xquery/xquery.js +kallithea/public/codemirror/mode/yaml/ +kallithea/public/codemirror/mode/yaml/yaml.js +kallithea/public/codemirror/mode/z80/ +kallithea/public/codemirror/mode/z80/z80.js +kallithea/public/css/ +kallithea/public/css/bootstrap.css +kallithea/public/css/contextbar.css +kallithea/public/css/mergely.css +kallithea/public/css/pygments.css +kallithea/public/css/style.css +kallithea/public/fontello/ +kallithea/public/fontello/README-kallithea.txt +kallithea/public/fontello/README.txt +kallithea/public/fontello/config.json +kallithea/public/fontello/css/ +kallithea/public/fontello/css/kallithea.css +kallithea/public/fontello/font/ +kallithea/public/fontello/font/kallithea.eot +kallithea/public/fontello/font/kallithea.svg +kallithea/public/fontello/font/kallithea.ttf +kallithea/public/fontello/font/kallithea.woff +kallithea/public/images/ +kallithea/public/images/background.png +kallithea/public/images/favicon.ico +kallithea/public/images/kallithea-logo.png +kallithea/public/images/kallithea-logo.svg +kallithea/public/images/pager.png +kallithea/public/images/pager_selected.png +kallithea/public/js/ +kallithea/public/js/base.js +kallithea/public/js/bootstrap.js +kallithea/public/js/codemirror_loadmode.js +kallithea/public/js/graph.js +kallithea/public/js/jquery-1.11.1.min.js +kallithea/public/js/mergely.js +kallithea/public/js/mousetrap.js +kallithea/public/js/native.history.js +kallithea/public/js/select2/ +kallithea/public/js/select2/select2-bootstrap.css +kallithea/public/js/select2/select2-spinner.gif +kallithea/public/js/select2/select2.css +kallithea/public/js/select2/select2.js +kallithea/public/js/select2/select2.png +kallithea/public/js/select2/select2x2.png +kallithea/public/js/yui.2.9.js +kallithea/public/js/yui.flot.js +kallithea/templates/ +kallithea/templates/about.html +kallithea/templates/admin/ +kallithea/templates/admin/admin.html +kallithea/templates/admin/admin_log.html +kallithea/templates/admin/auth/ +kallithea/templates/admin/auth/auth_settings.html +kallithea/templates/admin/defaults/ +kallithea/templates/admin/defaults/defaults.html +kallithea/templates/admin/gists/ +kallithea/templates/admin/gists/edit.html +kallithea/templates/admin/gists/index.html +kallithea/templates/admin/gists/new.html +kallithea/templates/admin/gists/show.html +kallithea/templates/admin/my_account/ +kallithea/templates/admin/my_account/my_account.html +kallithea/templates/admin/my_account/my_account_api_keys.html +kallithea/templates/admin/my_account/my_account_emails.html +kallithea/templates/admin/my_account/my_account_password.html +kallithea/templates/admin/my_account/my_account_perms.html +kallithea/templates/admin/my_account/my_account_profile.html +kallithea/templates/admin/my_account/my_account_repos.html +kallithea/templates/admin/my_account/my_account_watched.html +kallithea/templates/admin/notifications/ +kallithea/templates/admin/notifications/notifications.html +kallithea/templates/admin/notifications/notifications_data.html +kallithea/templates/admin/notifications/show_notification.html +kallithea/templates/admin/permissions/ +kallithea/templates/admin/permissions/permissions.html +kallithea/templates/admin/permissions/permissions_globals.html +kallithea/templates/admin/permissions/permissions_ips.html +kallithea/templates/admin/permissions/permissions_perms.html +kallithea/templates/admin/repo_groups/ +kallithea/templates/admin/repo_groups/repo_group_add.html +kallithea/templates/admin/repo_groups/repo_group_edit.html +kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html +kallithea/templates/admin/repo_groups/repo_group_edit_perms.html +kallithea/templates/admin/repo_groups/repo_group_edit_settings.html +kallithea/templates/admin/repo_groups/repo_group_show.html +kallithea/templates/admin/repo_groups/repo_groups.html +kallithea/templates/admin/repos/ +kallithea/templates/admin/repos/repo_add.html +kallithea/templates/admin/repos/repo_add_base.html +kallithea/templates/admin/repos/repo_creating.html +kallithea/templates/admin/repos/repo_edit.html +kallithea/templates/admin/repos/repo_edit_advanced.html +kallithea/templates/admin/repos/repo_edit_caches.html +kallithea/templates/admin/repos/repo_edit_fields.html +kallithea/templates/admin/repos/repo_edit_fork.html +kallithea/templates/admin/repos/repo_edit_permissions.html +kallithea/templates/admin/repos/repo_edit_remote.html +kallithea/templates/admin/repos/repo_edit_settings.html +kallithea/templates/admin/repos/repo_edit_statistics.html +kallithea/templates/admin/repos/repos.html +kallithea/templates/admin/settings/ +kallithea/templates/admin/settings/settings.html +kallithea/templates/admin/settings/settings_email.html +kallithea/templates/admin/settings/settings_global.html +kallithea/templates/admin/settings/settings_hooks.html +kallithea/templates/admin/settings/settings_mapping.html +kallithea/templates/admin/settings/settings_search.html +kallithea/templates/admin/settings/settings_system.html +kallithea/templates/admin/settings/settings_system_update.html +kallithea/templates/admin/settings/settings_vcs.html +kallithea/templates/admin/settings/settings_visual.html +kallithea/templates/admin/user_groups/ +kallithea/templates/admin/user_groups/user_group_add.html +kallithea/templates/admin/user_groups/user_group_edit.html +kallithea/templates/admin/user_groups/user_group_edit_advanced.html +kallithea/templates/admin/user_groups/user_group_edit_default_perms.html +kallithea/templates/admin/user_groups/user_group_edit_members.html +kallithea/templates/admin/user_groups/user_group_edit_perms.html +kallithea/templates/admin/user_groups/user_group_edit_settings.html +kallithea/templates/admin/user_groups/user_groups.html +kallithea/templates/admin/users/ +kallithea/templates/admin/users/user_add.html +kallithea/templates/admin/users/user_edit.html +kallithea/templates/admin/users/user_edit_advanced.html +kallithea/templates/admin/users/user_edit_api_keys.html +kallithea/templates/admin/users/user_edit_emails.html +kallithea/templates/admin/users/user_edit_ips.html +kallithea/templates/admin/users/user_edit_perms.html +kallithea/templates/admin/users/user_edit_profile.html +kallithea/templates/admin/users/users.html +kallithea/templates/base/ +kallithea/templates/base/base.html +kallithea/templates/base/default_perms_box.html +kallithea/templates/base/flash_msg.html +kallithea/templates/base/perms_summary.html +kallithea/templates/base/root.html +kallithea/templates/bookmarks/ +kallithea/templates/bookmarks/bookmarks.html +kallithea/templates/bookmarks/bookmarks_data.html +kallithea/templates/branches/ +kallithea/templates/branches/branches.html +kallithea/templates/branches/branches_data.html +kallithea/templates/changelog/ +kallithea/templates/changelog/changelog.html +kallithea/templates/changelog/changelog_details.html +kallithea/templates/changelog/changelog_summary_data.html +kallithea/templates/changeset/ +kallithea/templates/changeset/changeset.html +kallithea/templates/changeset/changeset_comment_block.html +kallithea/templates/changeset/changeset_file_comment.html +kallithea/templates/changeset/changeset_range.html +kallithea/templates/changeset/diff_block.html +kallithea/templates/changeset/patch_changeset.html +kallithea/templates/compare/ +kallithea/templates/compare/compare_cs.html +kallithea/templates/compare/compare_diff.html +kallithea/templates/data_table/ +kallithea/templates/data_table/_dt_elements.html +kallithea/templates/email_templates/ +kallithea/templates/email_templates/changeset_comment.html +kallithea/templates/email_templates/changeset_comment.txt +kallithea/templates/email_templates/default.html +kallithea/templates/email_templates/default.txt +kallithea/templates/email_templates/main.html +kallithea/templates/email_templates/main.txt +kallithea/templates/email_templates/password_reset.html +kallithea/templates/email_templates/password_reset.txt +kallithea/templates/email_templates/pull_request.html +kallithea/templates/email_templates/pull_request.txt +kallithea/templates/email_templates/pull_request_comment.html +kallithea/templates/email_templates/pull_request_comment.txt +kallithea/templates/email_templates/registration.html +kallithea/templates/email_templates/registration.txt +kallithea/templates/errors/ +kallithea/templates/errors/error_document.html +kallithea/templates/files/ +kallithea/templates/files/diff_2way.html +kallithea/templates/files/file_diff.html +kallithea/templates/files/files.html +kallithea/templates/files/files_add.html +kallithea/templates/files/files_browser.html +kallithea/templates/files/files_delete.html +kallithea/templates/files/files_edit.html +kallithea/templates/files/files_history_box.html +kallithea/templates/files/files_source.html +kallithea/templates/files/files_ypjax.html +kallithea/templates/followers/ +kallithea/templates/followers/followers.html +kallithea/templates/followers/followers_data.html +kallithea/templates/forks/ +kallithea/templates/forks/fork.html +kallithea/templates/forks/forks.html +kallithea/templates/forks/forks_data.html +kallithea/templates/index.html +kallithea/templates/index_base.html +kallithea/templates/journal/ +kallithea/templates/journal/journal.html +kallithea/templates/journal/journal_data.html +kallithea/templates/journal/public_journal.html +kallithea/templates/login.html +kallithea/templates/password_reset.html +kallithea/templates/password_reset_confirmation.html +kallithea/templates/pullrequests/ +kallithea/templates/pullrequests/pullrequest.html +kallithea/templates/pullrequests/pullrequest_data.html +kallithea/templates/pullrequests/pullrequest_show.html +kallithea/templates/pullrequests/pullrequest_show_all.html +kallithea/templates/pullrequests/pullrequest_show_my.html +kallithea/templates/register.html +kallithea/templates/search/ +kallithea/templates/search/search.html +kallithea/templates/search/search_commit.html +kallithea/templates/search/search_content.html +kallithea/templates/search/search_path.html +kallithea/templates/search/search_repository.html +kallithea/templates/summary/ +kallithea/templates/summary/statistics.html +kallithea/templates/summary/summary.html +kallithea/templates/switch_to_list.html +kallithea/templates/tags/ +kallithea/templates/tags/tags.html +kallithea/templates/tags/tags_data.html +kallithea/tests/ +kallithea/tests/__init__.py +kallithea/tests/api/ +kallithea/tests/api/__init__.py +kallithea/tests/api/api_base.py +kallithea/tests/api/test_api_git.py +kallithea/tests/api/test_api_hg.py +kallithea/tests/conftest.py +kallithea/tests/fixture.py +kallithea/tests/fixtures/ +kallithea/tests/fixtures/diff_with_diff_data.diff +kallithea/tests/fixtures/git_diff_binary_and_normal.diff +kallithea/tests/fixtures/git_diff_chmod.diff +kallithea/tests/fixtures/git_diff_mod_single_binary_file.diff +kallithea/tests/fixtures/git_diff_modify_binary_file.diff +kallithea/tests/fixtures/git_diff_rename_file.diff +kallithea/tests/fixtures/git_node_history_response.json +kallithea/tests/fixtures/hg_diff_add_single_binary_file.diff +kallithea/tests/fixtures/hg_diff_binary_and_normal.diff +kallithea/tests/fixtures/hg_diff_chmod.diff +kallithea/tests/fixtures/hg_diff_chmod_and_mod_single_binary_file.diff +kallithea/tests/fixtures/hg_diff_copy_and_chmod_file.diff +kallithea/tests/fixtures/hg_diff_copy_and_modify_file.diff +kallithea/tests/fixtures/hg_diff_copy_chmod_and_edit_file.diff +kallithea/tests/fixtures/hg_diff_copy_file.diff +kallithea/tests/fixtures/hg_diff_del_single_binary_file.diff +kallithea/tests/fixtures/hg_diff_mod_file_and_rename.diff +kallithea/tests/fixtures/hg_diff_mod_single_binary_file.diff +kallithea/tests/fixtures/hg_diff_mod_single_file_and_rename_and_chmod.diff +kallithea/tests/fixtures/hg_diff_rename_and_chmod_file.diff +kallithea/tests/fixtures/hg_diff_rename_file.diff +kallithea/tests/fixtures/hg_diff_rename_space_cr.diff +kallithea/tests/fixtures/hg_node_history_response.json +kallithea/tests/fixtures/journal_dump.csv +kallithea/tests/fixtures/markuptest.diff +kallithea/tests/fixtures/vcs_test_git.tar.gz +kallithea/tests/fixtures/vcs_test_hg.tar.gz +kallithea/tests/functional/ +kallithea/tests/functional/__init__.py +kallithea/tests/functional/test_admin.py +kallithea/tests/functional/test_admin_auth_settings.py +kallithea/tests/functional/test_admin_defaults.py +kallithea/tests/functional/test_admin_gists.py +kallithea/tests/functional/test_admin_notifications.py +kallithea/tests/functional/test_admin_permissions.py +kallithea/tests/functional/test_admin_repo_groups.py +kallithea/tests/functional/test_admin_repos.py +kallithea/tests/functional/test_admin_settings.py +kallithea/tests/functional/test_admin_user_groups.py +kallithea/tests/functional/test_admin_users.py +kallithea/tests/functional/test_branches.py +kallithea/tests/functional/test_changelog.py +kallithea/tests/functional/test_changeset.py +kallithea/tests/functional/test_changeset_comments.py +kallithea/tests/functional/test_compare.py +kallithea/tests/functional/test_compare_local.py +kallithea/tests/functional/test_feed.py +kallithea/tests/functional/test_files.py +kallithea/tests/functional/test_followers.py +kallithea/tests/functional/test_forks.py +kallithea/tests/functional/test_home.py +kallithea/tests/functional/test_journal.py +kallithea/tests/functional/test_login.py +kallithea/tests/functional/test_my_account.py +kallithea/tests/functional/test_pullrequests.py +kallithea/tests/functional/test_repo_groups.py +kallithea/tests/functional/test_search.py +kallithea/tests/functional/test_summary.py +kallithea/tests/functional/test_tags.py +kallithea/tests/models/ +kallithea/tests/models/__init__.py +kallithea/tests/models/common.py +kallithea/tests/models/test_changeset_status.py +kallithea/tests/models/test_diff_parsers.py +kallithea/tests/models/test_notifications.py +kallithea/tests/models/test_permissions.py +kallithea/tests/models/test_repo_groups.py +kallithea/tests/models/test_repos.py +kallithea/tests/models/test_user_group_permissions_on_repo_groups.py +kallithea/tests/models/test_user_groups.py +kallithea/tests/models/test_user_permissions_on_repo_groups.py +kallithea/tests/models/test_user_permissions_on_repos.py +kallithea/tests/models/test_users.py +kallithea/tests/other/ +kallithea/tests/other/__init__.py +kallithea/tests/other/manual_test_vcs_operations.py +kallithea/tests/other/test_libs.py +kallithea/tests/other/test_mail.py +kallithea/tests/other/test_validators.py +kallithea/tests/parameterized.py +kallithea/tests/scripts/ +kallithea/tests/scripts/create_rc.sh +kallithea/tests/scripts/manual_test_concurrency.py +kallithea/tests/scripts/manual_test_crawler.py +kallithea/tests/scripts/mem_watch +kallithea/tests/test.ini +kallithea/tests/vcs/ +kallithea/tests/vcs/__init__.py +kallithea/tests/vcs/aconfig +kallithea/tests/vcs/base.py +kallithea/tests/vcs/conf.py +kallithea/tests/vcs/test_archives.py +kallithea/tests/vcs/test_branches.py +kallithea/tests/vcs/test_changesets.py +kallithea/tests/vcs/test_filenodes_unicode_path.py +kallithea/tests/vcs/test_getitem.py +kallithea/tests/vcs/test_getslice.py +kallithea/tests/vcs/test_git.py +kallithea/tests/vcs/test_hg.py +kallithea/tests/vcs/test_inmemchangesets.py +kallithea/tests/vcs/test_nodes.py +kallithea/tests/vcs/test_repository.py +kallithea/tests/vcs/test_tags.py +kallithea/tests/vcs/test_utils.py +kallithea/tests/vcs/test_utils_filesize.py +kallithea/tests/vcs/test_vcs.py +kallithea/tests/vcs/test_workdirs.py +kallithea/tests/vcs/utils.py +kallithea/websetup.py +setup.cfg +setup.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/whitespacecleanup.sh Fri Oct 02 22:46:15 2015 +0200 @@ -0,0 +1,24 @@ +#!/bin/bash -x + +# Enforce some consistency in whitespace - just to avoid spurious whitespaces changes + +files=`hg loc '*.py' '*.html' '*.css' '*.rst' '*.txt' '*.js' '*.ini' '*.cfg' CONTRIBUTORS LICENSE.md| egrep -v '/lockfiles.py|LICENSE-MERGELY.html|/codemirror/|/fontello/|(graph|mergely|native.history|select2/select2|yui.flot|yui.2.9)\.js$'` + +sed -i -e "s,`printf '\t'`, ,g" $files +sed -i -e "s, *$,,g" $files +# ensure one trailing newline - remove empty last line and make last line include trailing newline: +sed -i -e '$,${/^$/d}' -e '$a\' $files + +sed -i -e 's,\([^ /]\){,\1 {,g' `hg loc '*.css'` +sed -i -e 's|^\([^ /].*,\)\([^ ]\)|\1 \2|g' `hg loc '*.css'` + +sed -i -e 's/^\( [^: ]*\) *: *\([^/]\)/\1: \2/g' kallithea/public/css/{style,contextbar}.css +sed -i -e '1s|, |,|g' kallithea/public/css/{style,contextbar}.css +sed -i -e 's/^\([^ ,/]\+ [^,]*[^ ,]\) *, *\(.\)/\1,\n\2/g' kallithea/public/css/{style,contextbar}.css +sed -i -e 's/^\([^ ,/].*\) */\1 /g' kallithea/public/css/{style,contextbar}.css +sed -i -e 's,^--$,-- ,g' kallithea/templates/email_templates/main.txt + +hg mani | xargs chmod -x +hg loc 'set:!binary()&grep("^#!")&!(**_tmpl.py)&!(**/template**)' | xargs chmod +x + +hg diff
--- a/setup.py Tue Sep 08 10:56:22 2015 +0000 +++ b/setup.py Fri Oct 02 22:46:15 2015 +0200 @@ -121,6 +121,16 @@ from ez_setup import use_setuptools use_setuptools() from setuptools import setup, find_packages + +# monkey patch setuptools to use distutils owner/group functionality +from setuptools.command import sdist +sdist_org = sdist.sdist +class sdist_new(sdist_org): + def initialize_options(self): + sdist_org.initialize_options(self) + self.owner = self.group = 'root' +sdist.sdist = sdist_new + # packages packages = find_packages(exclude=['ez_setup'])
--- a/whitespacecleanup.sh Tue Sep 08 10:56:22 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -#!/bin/bash -x - -# Enforce some consistency in whitespace - just to avoid spurious whitespaces changes - -files=`hg loc '*.py' '*.html' '*.css' '*.rst' '*.txt' '*.js' '*.ini' '*.cfg' CONTRIBUTORS LICENSE.md| egrep -v '/lockfiles.py|LICENSE-MERGELY.html|/codemirror/|/fontello/|(graph|mergely|native.history|select2/select2|yui.flot|yui.2.9)\.js$'` - -sed -i -e "s,`printf '\t'`, ,g" $files -sed -i -e "s, *$,,g" $files -# ensure one trailing newline - remove empty last line and make last line include trailing newline: -sed -i -e '$,${/^$/d}' -e '$a\' $files - -sed -i -e 's,\([^ /]\){,\1 {,g' `hg loc '*.css'` -sed -i -e 's|^\([^ /].*,\)\([^ ]\)|\1 \2|g' `hg loc '*.css'` - -sed -i -e 's/^\( [^: ]*\) *: *\([^/]\)/\1: \2/g' kallithea/public/css/{style,contextbar}.css -sed -i -e '1s|, |,|g' kallithea/public/css/{style,contextbar}.css -sed -i -e 's/^\([^ ,/]\+ [^,]*[^ ,]\) *, *\(.\)/\1,\n\2/g' kallithea/public/css/{style,contextbar}.css -sed -i -e 's/^\([^ ,/].*\) */\1 /g' kallithea/public/css/{style,contextbar}.css -sed -i -e 's,^--$,-- ,g' kallithea/templates/email_templates/main.txt - -hg mani | xargs chmod -x -hg loc 'set:!binary()&grep("^#!")&!(**_tmpl.py)&!(**/template**)' | xargs chmod +x - -hg diff