Changeset - 24c0d584ba86
[Not reviewed]
Bradley M. Kuhn - 12 years ago 2014-07-03 01:06:01
bkuhn@sfconservancy.org
General renaming to Kallithea
52 files changed:
README.rst
12
12
Changeset was too big and was cut off... Show full diff anyway
0 comments (0 inline, 0 general)
.hgignore
Show inline comments
 
syntax: glob
 
*.pyc
 
*.swp
 
*.sqlite
 
*.tox
 
*.egg-info
 
*.egg
 

	
 
syntax: regexp
 
^rcextensions
 
^build
 
^dist/
 
^docs/build/
 
^docs/_build/
 
^data$
 
^sql_dumps/
 
^\.settings$
 
^\.project$
 
^\.pydevproject$
 
^\.coverage$
 
^kallithea\.db$
 
^test\.db$
 
^RhodeCode\.egg-info$
 
^Kallithea\.egg-info$
 
^rc.*\.ini$
 
^fabfile.py
 
^\.idea$
CONTRIBUTORS
Show inline comments
 
List of contributors to RhodeCode project:
 
List of contributors to Kallithea project:
 
    Marcin Kuźmiński <marcin@python-works.com>
 
    Lukasz Balcerzak <lukaszbalcerzak@gmail.com>
 
    Jason Harris <jason@jasonfharris.com>
 
    Thayne Harbaugh  <thayne@fusionio.com>
 
    cejones <>
 
    Thomas Waldmann <tw-public@gmx.de>
 
    Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
 
    Dmitri Kuznetsov <>
 
    Jared Bunting <jared.bunting@peachjean.com>
 
    Steve Romanow <slestak989@gmail.com>
 
    Augosto Hermann <augusto.herrmann@planejamento.gov.br>    
 
    Ankit Solanki <ankit.solanki@gmail.com>    
 
    Liad Shani <liadff@gmail.com>
 
    Les Peabody <lpeabody@gmail.com>
 
    Jonas Oberschweiber <jonas.oberschweiber@d-velop.de>
 
    Matt Zuba <matt.zuba@goodwillaz.org>
 
    Aras Pranckevicius <aras@unity3d.com>
 
    Tony Bussieres <t.bussieres@gmail.com>
 
    Erwin Kroon <e.kroon@smartmetersolutions.nl>
 
    nansenat16 <nansenat16@null.tw>
 
    Vincent Duvert <vincent@duvert.net>
 
    Takumi IINO <trot.thunder@gmail.com>
 
    Indra Talip <indra.talip@gmail.com>
 
    James Rhodes <jrhodes@redpointsoftware.com.au>
 
    Dominik Ruf <dominikruf@gmail.com>
 
    xpol <xpolife@gmail.com>
 
    Vincent Caron <vcaron@bearstech.com>
 
    Zachary Auclair <zach101@gmail.com>
 
    Stefan Engel <mail@engel-stefan.de>
 
    Andrew Shadura <bugzilla@tut.by>
 
    Raoul Thill <raoul.thill@gmail.com>
 
    Philip Jameson <philip.j@hostdime.com>
 
    Mads Kiilerich <madski@unity3d.com>
 
    Dan Sheridan <djs@adelard.com>
 
    Dennis Brakhane <brakhane@googlemail.com>
 
    Simon Lopez <simon.lopez@slopez.org>
 
    Jonathan Sternberg <jonathansternberg@gmail.com>
 
    Grzegorz Rożniecki <xaerxess@gmail.com>
 
    Andrew Kesterson <andrew@aklabs.net>
 
    David A. Sjøen <david.sjoen@westcon.no>
 
    Jelmer Vernooij <jelmer@samba.org>
 
    larikale
 
    SteveCohen
 
    RhodeCode GmbH
 
    Kallithea GmbH
 
    Sebastian Kreutzberger <sebastian@rhodecode.com>
 
    thomas <thomas@rhodecode.com>
README.rst
Show inline comments
 
=========
 
RhodeCode
 
Kallithea
 
=========
 

	
 
About
 
-----
 

	
 
``RhodeCode`` is a fast and powerful management tool for Mercurial_ and GIT_
 
``Kallithea`` is a fast and powerful management tool for Mercurial_ and GIT_
 
with a built in push/pull server, full text search and code-review.
 
It works on http/https and has a built in permission/authentication system with
 
the ability to authenticate via LDAP or ActiveDirectory. RhodeCode also provides
 
the ability to authenticate via LDAP or ActiveDirectory. Kallithea also provides
 
simple API so it's easy integrable with existing external systems.
 

	
 
RhodeCode is similar in some respects to github_ or bitbucket_,
 
however RhodeCode can be run as standalone hosted application on your own server.
 
Kallithea is similar in some respects to github_ or bitbucket_,
 
however Kallithea can be run as standalone hosted application on your own server.
 
It is open source and donation ware and focuses more on providing a customized,
 
self administered interface for Mercurial_ and GIT_  repositories.
 
RhodeCode works on \*nix systems and Windows it is powered by a vcs_ library
 
Kallithea works on \*nix systems and Windows it is powered by a vcs_ library
 
that Lukasz Balcerzak and Marcin Kuzminski created to handle multiple
 
different version control systems.
 

	
 
RhodeCode uses `PEP386 versioning <http://www.python.org/dev/peps/pep-0386/>`_
 
Kallithea uses `PEP386 versioning <http://www.python.org/dev/peps/pep-0386/>`_
 

	
 
Installation
 
------------
 
Stable releases of RhodeCode are best installed via::
 
Stable releases of Kallithea are best installed via::
 

	
 
    easy_install kallithea
 

	
 
Or::
 

	
 
    pip install kallithea
 

	
 
Detailed instructions and links may be found on the Installation page.
 

	
 
Please visit http://packages.python.org/Kallithea/installation.html for
 
more details
 

	
 

	
 
Source code
 
-----------
 

	
 
The latest sources can be obtained from https://kallithea-scm.org/repos/kallithea
 

	
 

	
 
MIRRORS:
 

	
 
Issue tracker and sources at bitbucket_
 

	
 
https://bitbucket.org/conservancy/kallithea
 

	
 

	
 

	
 
RhodeCode Features
 
Kallithea Features
 
------------------
 

	
 
- Has its own middleware to handle mercurial_ and git_ protocol requests.
 
  Each request is authenticated and logged together with IP address.
 
- Build for speed and performance. You can make multiple pulls/pushes simultaneous.
 
  Proven to work with 1000s of repositories and users
 
- Supports http/https, LDAP, AD, proxy-pass authentication.
 
- Full permissions (private/read/write/admin) together with IP restrictions for each repository,
 
  additional explicit forking, repositories group and repository creation permissions.
 
- User groups for easier permission management.
 
- Repository groups let you group repos and manage them easier. They come with
 
  permission delegation features, so you can delegate groups management.
 
- Users can fork other users repos, and compare them at any time.
 
- Built in Gist functionality for sharing code snippets.
 
- Integrates easily with other systems, with custom created mappers you can connect it to almost
 
  any issue tracker, and with an JSON-RPC API you can make much more
 
- Build in commit-api let's you add, edit and commit files right from RhodeCode
 
- Build in commit-api let's you add, edit and commit files right from Kallithea
 
  web interface using simple editor or upload binary files using simple form.
 
- Powerfull pull-request driven review system with inline commenting,
 
  changeset statuses, and notification system.
 
- Importing and syncing repositories from remote locations for GIT_, Mercurial_ and  SVN.
 
- Mako templates let's you customize the look and feel of the application.
 
- Beautiful diffs, annotations and source code browsing all colored by pygments.
 
  Raw diffs are made in git-diff format for both VCS systems, including GIT_ binary-patches
 
- Mercurial_ and Git_ DAG graphs and yui-flot powered graphs with zooming and statistics
 
  to track activity for repositories
 
- Admin interface with user/permission management. Admin activity journal, logs
 
  pulls, pushes, forks, registrations and other actions made by all users.
 
- Server side forks. It is possible to fork a project and modify it freely
 
  without breaking the main repository.
 
- rst and markdown README support for repositories.
 
- Full text search powered by Whoosh on the source files, commit messages, and file names.
 
  Build in indexing daemons, with optional incremental index build
 
  (no external search servers required all in one application)
 
- Setup project descriptions/tags and info inside built in db for easy, non
 
  file-system operations.
 
- Intelligent cache with invalidation after push or project change, provides
 
  high performance and always up to date data.
 
- RSS / Atom feeds, gravatar support, downloadable sources as zip/tar/gz
 
- Optional async tasks for speed and performance using celery_
 
- Backup scripts can do backup of whole app and send it over scp to desired
 
  location
 
- Based on pylons / sqlalchemy / sqlite / whoosh / vcs
 

	
 

	
 
Incoming / Plans
 
----------------
 

	
 
- Finer granular permissions per branch, or subrepo
 
- Web based merges for pull requests
 
- Tracking history for each lines in files
 
- Simple issue tracker
 
- SSH based authentication with server side key management
 
- Commit based built in wiki system
 
- More statistics and graph (global annotation + some more statistics)
 
- Other advancements as development continues (or you can of course make
 
  additions and or requests)
 

	
 
License
 
-------
 

	
 
``RhodeCode`` is released under the GPLv3 license.
 
``Kallithea`` is released under the GPLv3 license.
 

	
 

	
 
Getting help
 
------------
 

	
 
Listed bellow are various support resources that should help.
 

	
 
.. note::
 

	
 
   Please try to read the documentation before posting any issues, especially
 
   the **troubleshooting section**
 

	
 
- Open an issue at `issue tracker <https://bitbucket.org/conservancy/kallithea/issues>`_
 

	
 
- Join #kallithea on FreeNode (irc.freenode.net)
 
  or use http://webchat.freenode.net/?channels=kallithea for web access to irc.
 

	
 
You can follow this project on Twitter, **@KallitheaSCM**.
 

	
 

	
 
Online documentation
 
--------------------
 

	
 
Online documentation for the current version of RhodeCode is available at
 
Online documentation for the current version of Kallithea is available at
 
 - http://packages.python.org/Kallithea/
 
 - http://kallithea.readthedocs.org/
 

	
 
You may also build the documentation for yourself - go into ``docs/`` and run::
 

	
 
   make html
 

	
 
(You need to have sphinx_ installed to build the documentation. If you don't
 
have sphinx_ installed you can install it via the command:
 
``easy_install sphinx``)
 

	
 
.. _virtualenv: http://pypi.python.org/pypi/virtualenv
 
.. _python: http://www.python.org/
 
.. _sphinx: http://sphinx.pocoo.org/
 
.. _mercurial: http://mercurial.selenic.com/
 
.. _bitbucket: http://bitbucket.org/
 
.. _github: http://github.com/
 
.. _subversion: http://subversion.tigris.org/
 
.. _git: http://git-scm.com/
 
.. _celery: http://celeryproject.org/
 
.. _Sphinx: http://sphinx.pocoo.org/
 
.. _vcs: http://pypi.python.org/pypi/vcs
development.ini
Show inline comments
 
################################################################################
 
################################################################################
 
# RhodeCode - Pylons environment configuration                                 #
 
# Kallithea - Pylons environment configuration                                 #
 
#                                                                              #
 
# The %(here)s variable will be replaced with the parent directory of this file#
 
################################################################################
 

	
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
################################################################################
 
## Uncomment and replace with the address which should receive                ##
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
## Additionally those settings will be used by Kallithea mailing system       ##
 
################################################################################
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = kallithea-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 
#email_prefix = [Kallithea]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username =
 
#smtp_password =
 
#smtp_port =
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 
#smtp_auth =
 

	
 
[server:main]
 
## PASTE ##
 
#use = egg:Paste#http
 
## nr of worker threads to spawn
 
#threadpool_workers = 5
 
## max request before thread respawn
 
#threadpool_max_requests = 10
 
## option to use threads of process
 
#use_threadpool = true
 

	
 
## WAITRESS ##
 
use = egg:waitress#main
 
## number of worker threads
 
threads = 5
 
@@ -140,124 +140,124 @@ use = egg:kallithea
 
full_stack = true
 
static_files = true
 
## Optional Languages
 
## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 

	
 
## perform a full repository scan on each server start, this should be
 
## set to false after first startup, to allow faster server restarts.
 
initial_repo_scan = true
 

	
 
## uncomment and set this path to use archive download cache
 
#archive_cache_dir = /tmp/tarballcache
 

	
 
## change this to unique ID for security
 
app_instance_uuid = rc-production
 

	
 
## cut off limit for large diffs (size in bytes)
 
cut_off_limit = 256000
 

	
 
## use cache version of scm repo everywhere
 
vcs_full_cache = true
 

	
 
## force https in RhodeCode, fixes https redirects, assumes it's always https
 
## force https in Kallithea, fixes https redirects, assumes it's always https
 
force_https = false
 

	
 
## use Strict-Transport-Security headers
 
use_htsts = false
 

	
 
## number of commits stats will parse on each iteration
 
commit_parse_limit = 25
 

	
 
## use gravatar service to display avatars
 
use_gravatar = true
 

	
 
## path to git executable
 
git_path = git
 

	
 
## git rev filter option, --all is the default filter, if you need to
 
## hide all refs in changelog switch this to --branches --tags
 
git_rev_filter=--all
 

	
 
## RSS feed options
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 
## options for showing and identifying changesets
 
show_sha_length = 12
 
show_revision_number = true
 

	
 
## 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
 
## RhodeCode url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid>
 
## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid>
 
gist_alias_url =
 

	
 
## white list of API enabled controllers. This allows to add list of
 
## controllers to which access will be enabled by api_key. eg: to enable
 
## api access to raw_files put `FilesController:raw`, to enable access to patches
 
## add `ChangesetController:changeset_patch`. This list should be "," separated
 
## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
 
## Recommended settings bellow are commented out:
 
api_access_controllers_whitelist =
 
#    ChangesetController:changeset_patch,
 
#    ChangesetController:changeset_raw,
 
#    FilesController:raw,
 
#    FilesController:archivefile
 

	
 
## alternative_gravatar_url allows you to use your own avatar server application
 
## the following parts of the URL will be replaced
 
## {email}        user email
 
## {md5email}     md5 hash of the user email (like at gravatar.com)
 
## {size}         size of the image that is expected from the server application
 
## {scheme}       http/https from RhodeCode server
 
## {netloc}       network location from RhodeCode server
 
## {scheme}       http/https from Kallithea server
 
## {netloc}       network location from Kallithea server
 
#alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 
#alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 

	
 

	
 
## container auth options
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 

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

	
 
## overwrite schema of clone url
 
## available vars:
 
## scheme - http/https
 
## user - current user
 
## pass - password
 
## netloc - network location
 
## path - usually repo_name
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
## issue tracker for RhodeCode (leave blank to disable, absent for default)
 
## issue tracker for Kallithea (leave blank to disable, absent for default)
 
#bugtracker = https://bitbucket.org/conservancy/kallithea/issues
 

	
 
## issue tracking mapping for commits messages
 
## comment out issue_pat, issue_server, issue_prefix to enable
 

	
 
## pattern to get the issues from commit messages
 
## default one used here is #<numbers> with a regex passive group for `#`
 
## {id} will be all groups matched from this pattern
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## 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}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
 
## multiple patterns, to other issues server, wiki or others
 
@@ -379,49 +379,49 @@ beaker.session.secret = develop-rc-uytcx
 

	
 
## sets session as invalid if it haven't been accessed for given amount of time
 
beaker.session.timeout = 2592000
 
beaker.session.httponly = true
 
#beaker.session.cookie_path = /<your-prefix>
 

	
 
## uncomment for https secure cookie
 
beaker.session.secure = false
 

	
 
## auto save the session to not to use .save()
 
beaker.session.auto = False
 

	
 
## default cookie expiration time in seconds `true` expire at browser close ##
 
#beaker.session.cookie_expires = 3600
 

	
 

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

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

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

	
 
## errormator enabled
 
errormator = false
 

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

	
 
## TWEAK AMOUNT OF INFO SENT HERE
 

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

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

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

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

	
init.d/celeryd-upstart.conf
Show inline comments
 
# celeryd - run the celeryd daemon as an upstart job for kallithea
 
# Change variables/paths as necessary and place file /etc/init/celeryd.conf
 
# start/stop/restart as normal upstart job (ie: $ start celeryd)
 

	
 
description	"Celery for RhodeCode Mercurial Server"
 
description	"Celery for Kallithea Mercurial Server"
 
author		"Matt Zuba <matt.zuba@goodwillaz.org"
 

	
 
start on starting kallithea
 
stop on stopped kallithea
 

	
 
respawn
 

	
 
umask 0022
 

	
 
env PIDFILE=/tmp/celeryd.pid
 
env APPINI=/var/hg/kallithea/production.ini
 
env HOME=/var/hg
 
env USER=hg
 
# To use group (if different from user), you must edit sudoers file and change
 
# root's entry from (ALL) to (ALL:ALL)
 
# env GROUP=hg
 

	
 
script
 
    COMMAND="/var/hg/.virtualenvs/kallithea/bin/paster celeryd $APPINI --pidfile=$PIDFILE"
 
    if [ -z "$GROUP" ]; then
 
        exec sudo -u $USER $COMMAND
 
    else
 
        exec sudo -u $USER -g $GROUP $COMMAND
 
    fi
init.d/kallithea-daemon-redhat
Show inline comments
 
#!/bin/sh
 
########################################
 
#### THIS IS A REDHAT INIT.D SCRIPT ####
 
########################################
 

	
 
##################################################
 
#
 
# RhodeCode server startup script
 
# Kallithea server startup script
 
# Recommended default-startup: 2 3 4 5
 
# Recommended default-stop: 0 1 6
 
#
 
##################################################
 

	
 

	
 
APP_NAME="kallithea"
 
# the location of your app
 
# since this is a web app, it should go in /var/www
 
APP_PATH="/var/www/$APP_NAME"
 

	
 
CONF_NAME="production.ini"
 

	
 
# write to wherever the PID should be stored, just ensure
 
# that the user you run paster as has the appropriate permissions
 
# same goes for the log file
 
PID_PATH="/var/run/kallithea/pid"
 
LOG_PATH="/var/log/kallithea/kallithea.log"
 

	
 
# replace this with the path to the virtual environment you
 
# made for RhodeCode
 
# made for Kallithea
 
PYTHON_PATH="/opt/python_virtualenvironments/kallithea-venv"
 

	
 
RUN_AS="kallithea"
 

	
 
DAEMON="$PYTHON_PATH/bin/paster"
 

	
 
DAEMON_OPTS="serve --daemon \
 
    --user=$RUN_AS \
 
    --group=$RUN_AS \
 
    --pid-file=$PID_PATH \
 
    --log-file=$LOG_PATH $APP_PATH/$CONF_NAME"
 

	
 
DESC="kallithea-server"
 
LOCK_FILE="/var/lock/subsys/$APP_NAME"
 

	
 
# source CentOS init functions
 
. /etc/init.d/functions
 

	
 
RETVAL=0
 

	
 
remove_pid () {
 
  rm -f ${PID_PATH}
 
  rmdir `dirname ${PID_PATH}`
 
}
 
@@ -92,41 +92,41 @@ status_kallithea() {
 
  return $RETVAL
 
}
 

	
 
restart_kallithea () {
 
    stop_kallithea
 
    start_kallithea
 
    RETVAL=$?
 
}
 

	
 
case "$1" in
 
  start)
 
    echo -n $"Starting $DESC: "
 
    start_kallithea
 
    echo
 
    ;;
 
  stop)
 
    echo -n $"Stopping $DESC: "
 
    stop_kallithea
 
    echo
 
    ;;
 
  status)
 
    status_kallithea
 
    RETVAL=$?
 
    if [ ! $RETVAL -eq 0 ]; then
 
      echo "RhodeCode server is running..."
 
      echo "Kallithea server is running..."
 
    else
 
      echo "RhodeCode server is stopped."
 
      echo "Kallithea server is stopped."
 
    fi
 
    ;;
 
  restart)
 
    echo -n $"Restarting $DESC: "
 
    restart_kallithea
 
    echo
 
    ;;
 
  *)
 
    echo $"Usage: $0 {start|stop|restart|status}"
 
    RETVAL=1
 
    ;;
 
esac
 

	
 
exit $RETVAL
 
\ No newline at end of file
init.d/kallithea-upstart.conf
Show inline comments
 
# kallithea - run the kallithea daemon as an upstart job
 
# Change variables/paths as necessary and place file /etc/init/kallithea.conf
 
# start/stop/restart as normal upstart job (ie: $ start kallithea)
 

	
 
description	"RhodeCode Mercurial Server"
 
description	"Kallithea Mercurial Server"
 
author		"Matt Zuba <matt.zuba@goodwillaz.org"
 

	
 
start on (local-filesystems and runlevel [2345])
 
stop on runlevel [!2345]
 

	
 
respawn
 

	
 
umask 0022
 

	
 
env PIDFILE=/var/hg/kallithea/kallithea.pid
 
env LOGFILE=/var/hg/kallithea/log/kallithea.log
 
env APPINI=/var/hg/kallithea/production.ini
 
env HOME=/var/hg
 
env USER=hg
 
env GROUP=hg
 

	
 
exec /var/hg/.virtualenvs/kallithea/bin/paster serve --user=$USER --group=$GROUP --pid-file=$PIDFILE --log-file=$LOGFILE $APPINI
 

	
 
post-stop script
 
	rm -f $PIDFILE
 
end script
init.d/supervisord.conf
Show inline comments
 
; RhodeCode Supervisord
 
; Kallithea Supervisord
 
; ##########################
 
; for help see http://supervisord.org/configuration.html
 
; ##########################
 

	
 
[inet_http_server]         ; inet (TCP) server disabled by default
 
port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
 
;username=user              ; (default is no username (open server))
 
;password=123               ; (default is no password (open server))
 

	
 
[supervisord]
 
logfile=/%(here)s/supervisord_kallithea.log ; (main log file;default $CWD/supervisord.log)
 
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
 
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
 
loglevel=info                ; (log level;default info; others: debug,warn,trace)
 
pidfile=/%(here)s/supervisord_kallithea.pid ; (supervisord pidfile;default supervisord.pid)
 
nodaemon=true               ; (start in foreground if true;default false)
 
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
 
minprocs=200                 ; (min. avail process descriptors;default 200)
 
umask=022                    ; (process file creation umask;default 022)
 
user=username                  ; (default is current user, required if root)
 
;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
 
;directory=/tmp              ; (default is not to cd during start)
 
;nocleanup=true              ; (don't clean up tempfiles at start;default false)
 
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
kallithea/__init__.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.__init__
 
~~~~~~~~~~~~~~~~~~
 

	
 
RhodeCode, a web based repository management based on pylons
 
Kallithea, a web based repository management based on pylons
 
versioning implementation: http://www.python.org/dev/peps/pep-0386/
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 9, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import sys
 
import platform
 

	
 
VERSION = (2, 2, 5)
 
BACKENDS = {
 
    'hg': 'Mercurial repository',
 
    'git': 'Git repository',
 
}
 

	
 
CELERY_ON = False
 
CELERY_EAGER = False
 

	
 
# link to config for pylons
 
CONFIG = {}
kallithea/bin/__init__.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.bin.__init__
 
~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Binary scripts for RhodeCode
 
Binary scripts for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Jun 03, 2012
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
kallithea/bin/base.py
Show inline comments
 
@@ -25,94 +25,94 @@ Original author and date, and relevant c
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import os
 
import sys
 
import random
 
import urllib2
 
import pprint
 

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

	
 
CONFIG_NAME = '.config/kallithea'
 
FORMAT_PRETTY = 'pretty'
 
FORMAT_JSON = 'json'
 

	
 

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

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

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

	
 
    if not method:
 
        raise Exception('please specify method name !')
 
    apihost = apihost.rstrip('/')
 
    id_ = random.randrange(1, 9999)
 
    req = urllib2.Request('%s/_admin/api' % apihost,
 
                      data=json.dumps(_build_data(id_)),
 
                      headers={'content-type': 'text/plain'})
 
    ret = urllib2.urlopen(req)
 
    raw_json = ret.read()
 
    json_data = json.loads(raw_json)
 
    id_ret = json_data['id']
 
    if id_ret == id_:
 
        return json_data
 

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

	
 

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

	
 
    conf = RcConf()
 
    conf['key']
 

	
 
    """
 

	
 
    def __init__(self, config_location=None, autoload=True, autocreate=False,
 
                 config=None):
 
        HOME = os.getenv('HOME', os.getenv('USERPROFILE')) or ''
 
        HOME_CONF = os.path.abspath(os.path.join(HOME, CONFIG_NAME))
 
        self._conf_name = HOME_CONF if not config_location else config_location
 
        self._conf = {}
 
        if autocreate:
 
            self.make_config(config)
 
        if autoload:
 
            self._conf = self.load_config()
 

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

	
 
    def __nonzero__(self):
 
        if self._conf:
 
            return True
 
        return False
kallithea/bin/kallithea_api.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.bin.api
 
~~~~~~~~~~~~~~~~~
 

	
 
Api CLI client for RhodeCode
 
Api CLI client for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Jun 3, 2012
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
from __future__ import with_statement
 
import sys
 
import argparse
 

	
 
from kallithea.bin.base import json, api_call, RcConf, FORMAT_JSON, FORMAT_PRETTY
 

	
 

	
 
def argparser(argv):
 
    usage = (
 
      "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"
 
    )
 

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

	
 
    ## config
 
    group = parser.add_argument_group('config')
 
    group.add_argument('--apikey', help='api access key')
 
    group.add_argument('--apihost', help='api host')
 
    group.add_argument('--config', help='config file')
 
    group.add_argument('--save-config', action='store_true', help='save the given config into a file')
 

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

	
 

	
 
def main(argv=None):
 
    """
kallithea/bin/kallithea_config.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.bin.kallithea_config
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
configuration generator for RhodeCode
 
configuration generator for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Jun 18, 2013
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
from __future__ import with_statement
 
import os
 
import sys
 
import uuid
 
import argparse
 
from mako.template import Template
 
TMPL = 'template.ini.mako'
 
here = os.path.dirname(os.path.abspath(__file__))
 

	
 
def argparser(argv):
 
    usage = (
 
      "kallithea-config [-h] [--filename=FILENAME] [--template=TEMPLATE] \n"
 
      "VARS optional specify extra template variable that will be available in "
 
      "template. Use comma separated key=val format eg.\n"
 
      "key1=val1,port=5000,host=127.0.0.1,elements='a\,b\,c'\n"
 
    )
 

	
 
    parser = argparse.ArgumentParser(
 
        description='RhodeCode CONFIG generator with variable replacement',
 
        description='Kallithea CONFIG generator with variable replacement',
 
        usage=usage
 
    )
 

	
 
    ## config
 
    group = parser.add_argument_group('CONFIG')
 
    group.add_argument('--filename', help='Output ini filename.')
 
    group.add_argument('--template', help='Mako template file to use instead of '
 
                                          'the default builtin template')
 
    group.add_argument('--raw', help='Store given mako template as raw without '
 
                                     'parsing. Use this to create custom template '
 
                                     'initially', action='store_true')
 
    group.add_argument('--show-defaults', help='Show all default variables for '
 
                                               'builtin template', action='store_true')
 
    args, other = parser.parse_known_args()
 
    return parser, args, other
 

	
 

	
 
def _escape_split(text, sep):
 
    """
 
    Allows for escaping of the separator: e.g. arg='foo\, bar'
 

	
 
    It should be noted that the way bash et. al. do command line parsing, those
 
    single quotes are required. a shameless ripoff from fabric project.
 

	
kallithea/bin/kallithea_gist.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.bin.kallithea_gist
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Gist CLI client for RhodeCode
 
Gist CLI client for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: May 9, 2013
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
from __future__ import with_statement
 
import os
 
import sys
 
import stat
 
import argparse
 
import fileinput
 

	
 
from kallithea.bin.base import json, api_call, RcConf, FORMAT_JSON, FORMAT_PRETTY
 

	
 

	
 
def argparser(argv):
 
    usage = (
 
      "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"
 
    )
 

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

	
 
    ## config
 
    group = parser.add_argument_group('config')
 
    group.add_argument('--apikey', help='api access key')
 
    group.add_argument('--apihost', help='api host')
 
    group.add_argument('--config', help='config file path DEFAULT: ~/.config/kallithea')
 
    group.add_argument('--save-config', action='store_true',
 
                       help='save the given config into a file')
 

	
 
    group = parser.add_argument_group('GIST')
 
    group.add_argument('-p', '--private', action='store_true',
 
                       help='create private Gist')
 
    group.add_argument('-f', '--filename',
 
                       help='set uploaded gist filename, '
 
                            'also defines syntax highlighting')
 
    group.add_argument('-d', '--description', help='Gist description')
 
    group.add_argument('-l', '--lifetime', metavar='MINUTES',
 
                       help='gist lifetime in minutes, -1 (DEFAULT) is forever')
 
    group.add_argument('--format', dest='format', type=str,
 
                       help='output format DEFAULT: `%s` can '
 
                       'be also `%s`' % (FORMAT_PRETTY, FORMAT_JSON),
 
            default=FORMAT_PRETTY
 
    )
kallithea/bin/ldap_sync.py
Show inline comments
 
@@ -54,73 +54,73 @@ class ResponseError(Exception):
 
class UserAlreadyInGroupError(Exception):
 
    """ User is already a member of the target group. """
 

	
 

	
 
class UserNotInGroupError(Exception):
 
    """ User is not a member of the target group. """
 

	
 

	
 
class API(object):
 

	
 
    def __init__(self, url, key):
 
        self.url = url
 
        self.key = key
 

	
 
    def get_api_data(self, uid, method, args):
 
        """Prepare dict for API post."""
 
        return {
 
            "id": uid,
 
            "api_key": self.key,
 
            "method": method,
 
            "args": args
 
        }
 

	
 
    def post(self, method, args):
 
        """Send a generic API post to Rhodecode.
 
        """Send a generic API post to Kallithea.
 

	
 
        This will generate the UUID for validation check after the
 
        response is returned. Handle errors and get the result back.
 
        """
 
        uid = str(uuid.uuid1())
 
        data = self.get_api_data(uid, method, args)
 

	
 
        data = json.dumps(data)
 
        headers = {'content-type': 'text/plain'}
 
        req = urllib2.Request(self.url, data, headers)
 

	
 
        response = urllib2.urlopen(req)
 
        response = json.load(response)
 

	
 
        if uid != response["id"]:
 
            raise InvalidResponseIDError("UUID does not match.")
 

	
 
        if response["error"] is not None:
 
            raise ResponseError(response["error"])
 

	
 
        return response["result"]
 

	
 
    def create_group(self, name, active=True):
 
        """Create the Rhodecode user group."""
 
        """Create the Kallithea user group."""
 
        args = {
 
            "group_name": name,
 
            "active": str(active)
 
        }
 
        self.post("create_user_group", args)
 

	
 
    def add_membership(self, group, username):
 
        """Add specific user to a group."""
 
        args = {
 
            "usersgroupid": group,
 
            "userid": username
 
        }
 
        result = self.post("add_user_to_user_group", args)
 
        if not result["success"]:
 
            raise UserAlreadyInGroupError("User %s already in group %s." %
 
                                          (username, group))
 

	
 
    def remove_membership(self, group, username):
 
        """Remove specific user from a group."""
 
        args = {
 
            "usersgroupid": group,
 
            "userid": username
 
        }
 
        result = self.post("remove_user_from_user_group", args)
 
@@ -187,49 +187,49 @@ class LdapClient(object):
 

	
 
        return users
 

	
 
    def parse_member_string(self, member):
 
        """Parses the member string and returns a touple of type and name.
 

	
 
        Unique member can be either user or group. Users will have 'uid' as
 
        prefix while groups will have 'cn'.
 
        """
 
        member = member.split(",")[0]
 
        return member.split('=')
 

	
 

	
 
class LdapSync(object):
 

	
 
    def __init__(self):
 
        self.ldap_client = LdapClient(config.get("default", "ldap_uri"),
 
                                      config.get("default", "ldap_user"),
 
                                      config.get("default", "ldap_key"),
 
                                      config.get("default", "base_dn"))
 
        self.rhodocode_api = API(config.get("default", "api_url"),
 
                                          config.get("default", "api_key"))
 

	
 
    def update_groups_from_ldap(self):
 
        """Add all the groups from LDAP to Rhodecode."""
 
        """Add all the groups from LDAP to Kallithea."""
 
        added = existing = 0
 
        groups = self.ldap_client.get_groups()
 
        for group in groups:
 
            try:
 
                self.kallithea_api.create_repo_group(group)
 
                added += 1
 
            except Exception:
 
                existing += 1
 

	
 
        return added, existing
 

	
 
    def update_memberships_from_ldap(self, group):
 
        """Update memberships based on the LDAP groups."""
 
        groups = self.ldap_client.get_groups()
 
        group_users = self.ldap_client.get_group_users(groups, group)
 

	
 
        # Delete memberships first from each group which are not part
 
        # of the group any more.
 
        members = self.kallithea_api.get_group_members(group)
 
        for member in members:
 
            if member not in group_users:
 
                try:
 
                    self.rhodocode_api.remove_membership(group,
 
                                                         member)
kallithea/bin/template.ini.mako
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%text>
 
################################################################################
 
################################################################################
 
# RhodeCode - Example config                                                   #
 
# Kallithea - Example config                                                   #
 
# Built-in functions and variables                                             #
 
# The ${here} variable will be replaced with the parent directory of this file #
 
# ${uuid()} function will generate a unique hash                               #
 
################################################################################
 
</%text>
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
<%text>
 
################################################################################
 
## Uncomment and replace with the address which should receive                ##
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
## Additionally those settings will be used by Kallithea mailing system       ##
 
################################################################################
 
</%text>
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = kallithea-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 
#email_prefix = [Kallithea]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username =
 
#smtp_password =
 
#smtp_port =
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
<%text>## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)</%text>
 
#smtp_auth =
 

	
 
[server:main]
 
%if http_server == 'paste':
 
<%text>## PASTE ##</%text>
 
use = egg:Paste#http
 
<%text>## nr of worker threads to spawn</%text>
 
threadpool_workers = 5
 
<%text>## max request before thread respawn</%text>
 
threadpool_max_requests = 10
 
<%text>## option to use threads of process</%text>
 
use_threadpool = true
 
%endif
 
%if http_server == 'waitress':
 
<%text>## WAITRESS ##</%text>
 
use = egg:waitress#main
 
@@ -149,119 +149,119 @@ use = egg:kallithea
 
full_stack = true
 
static_files = true
 
<%text>## Optional Languages</%text>
 
<%text>## en, fr, ja, pt_BR, zh_CN, zh_TW, pl, ru</%text>
 
lang = ${lang}
 
cache_dir = ${here}/data
 
index_dir = ${here}/data/index
 

	
 
<%text>## perform a full repository scan on each server start, this should be</%text>
 
<%text>## set to false after first startup, to allow faster server restarts.</%text>
 
initial_repo_scan = false
 

	
 
<%text>## uncomment and set this path to use archive download cache</%text>
 
archive_cache_dir = ${here}/tarballcache
 

	
 
<%text>## change this to unique ID for security</%text>
 
app_instance_uuid = ${uuid()}
 

	
 
<%text>## cut off limit for large diffs (size in bytes)</%text>
 
cut_off_limit = 256000
 

	
 
<%text>## use cache version of scm repo everywhere</%text>
 
vcs_full_cache = true
 

	
 
<%text>## force https in RhodeCode, fixes https redirects, assumes it's always https</%text>
 
<%text>## force https in Kallithea, fixes https redirects, assumes it's always https</%text>
 
force_https = false
 

	
 
<%text>## use Strict-Transport-Security headers</%text>
 
use_htsts = false
 

	
 
<%text>## number of commits stats will parse on each iteration</%text>
 
commit_parse_limit = 25
 

	
 
<%text>## use gravatar service to display avatars</%text>
 
use_gravatar = true
 

	
 
<%text>## path to git executable</%text>
 
git_path = git
 

	
 
<%text>## git rev filter option, --all is the default filter, if you need to</%text>
 
<%text>## hide all refs in changelog switch this to --branches --tags</%text>
 
git_rev_filter=--branches --tags
 

	
 
<%text>## RSS feed options</%text>
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 
<%text>## options for showing and identifying changesets</%text>
 
show_sha_length = 12
 
show_revision_number = true
 

	
 
<%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>## RhodeCode url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid></%text>
 
<%text>## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid></%text>
 
gist_alias_url =
 

	
 
<%text>## white list of API enabled controllers. This allows to add list of</%text>
 
<%text>## controllers to which access will be enabled by api_key. eg: to enable</%text>
 
<%text>## api access to raw_files put `FilesController:raw`, to enable access to patches</%text>
 
<%text>## add `ChangesetController:changeset_patch`. This list should be "," separated</%text>
 
<%text>## Syntax is <ControllerClass>:<function>. Check debug logs for generated names</%text>
 
api_access_controllers_whitelist =
 

	
 
<%text>## alternative_gravatar_url allows you to use your own avatar server application</%text>
 
<%text>## the following parts of the URL will be replaced</%text>
 
<%text>## {email}        user email</%text>
 
<%text>## {md5email}     md5 hash of the user email (like at gravatar.com)</%text>
 
<%text>## {size}         size of the image that is expected from the server application</%text>
 
<%text>## {scheme}       http/https from RhodeCode server</%text>
 
<%text>## {netloc}       network location from RhodeCode server</%text>
 
<%text>## {scheme}       http/https from Kallithea server</%text>
 
<%text>## {netloc}       network location from Kallithea server</%text>
 
#alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 
#alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 

	
 

	
 
<%text>## container auth options</%text>
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 

	
 
<%text>## default encoding used to convert from and to unicode</%text>
 
<%text>## can be also a comma seperated list of encoding in case of mixed encodings</%text>
 
default_encoding = utf8
 

	
 
<%text>## overwrite schema of clone url</%text>
 
<%text>## available vars:</%text>
 
<%text>## scheme - http/https</%text>
 
<%text>## user - current user</%text>
 
<%text>## pass - password</%text>
 
<%text>## netloc - network location</%text>
 
<%text>## path - usually repo_name</%text>
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
<%text>## issue tracker for RhodeCode (leave blank to disable, absent for default)</%text>
 
<%text>## issue tracker for Kallithea (leave blank to disable, absent for default)</%text>
 
#bugtracker = https://bitbucket.org/conservancy/kallithea/issues
 

	
 
<%text>## issue tracking mapping for commits messages</%text>
 
<%text>## comment out issue_pat, issue_server, issue_prefix to enable</%text>
 

	
 
<%text>## pattern to get the issues from commit messages</%text>
 
<%text>## default one used here is #<numbers> with a regex passive group for `#`</%text>
 
<%text>## {id} will be all groups matched from this pattern</%text>
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
<%text>## server url to the issue, each {id} will be replaced with match</%text>
 
<%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}
 

	
 
<%text>## prefix to add to link to indicate it's an url</%text>
 
<%text>## #314 will be replaced by <issue_prefix><id></%text>
 

	
 
issue_prefix = #
 

	
 
<%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>
 
@@ -386,49 +386,49 @@ beaker.session.secret = ${uuid()}
 
<%text>## sets session as invalid if it haven't been accessed for given amount of time</%text>
 
beaker.session.timeout = 2592000
 
beaker.session.httponly = true
 
#beaker.session.cookie_path = /<your-prefix>
 

	
 
<%text>## uncomment for https secure cookie</%text>
 
beaker.session.secure = false
 

	
 
<%text>## auto save the session to not to use .save()</%text>
 
beaker.session.auto = False
 

	
 
<%text>## default cookie expiration time in seconds `true` expire at browser close ##</%text>
 
#beaker.session.cookie_expires = 3600
 

	
 
%if error_aggregation_service == 'errormator':
 
<%text>
 
############################
 
## ERROR HANDLING SYSTEMS ##
 
############################
 

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

	
 
## Errormator is tailored to work with RhodeCode, see
 
## Errormator is tailored to work with Kallithea, see
 
## http://errormator.com for details how to obtain an account
 
## you must install python package `errormator_client` to make it work
 
</%text>
 
<%text>## errormator enabled</%text>
 
errormator = false
 

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

	
 
<%text>## TWEAK AMOUNT OF INFO SENT HERE</%text>
 

	
 
<%text>## enables 404 error logging (default False)</%text>
 
errormator.report_404 = false
 

	
 
<%text>## time in seconds after request is considered being slow (default 1)</%text>
 
errormator.slow_request_time = 1
 

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

	
 
<%text>## enable hooking to application loggers</%text>
 
# errormator.logging = true
 

	
kallithea/config/conf.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.config.conf
 
~~~~~~~~~~~~~~~~~~~~~
 

	
 
Various config settings for RhodeCode
 
Various config settings for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Mar 7, 2012
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 
from kallithea import EXTENSIONS
 

	
 
from kallithea.lib.utils2 import __get_lem
 

	
 

	
 
# language map is also used by whoosh indexer, which for those specified
 
# extensions will index it's content
 
LANGUAGES_EXTENSIONS_MAP = __get_lem()
 

	
 
#==============================================================================
 
# WHOOSH INDEX EXTENSIONS
 
#==============================================================================
 
# EXTENSIONS WE WANT TO INDEX CONTENT OFF USING WHOOSH
 
INDEX_EXTENSIONS = LANGUAGES_EXTENSIONS_MAP.keys()
 

	
 
# list of readme files to search in file tree and display in summary
kallithea/config/deployment.ini_tmpl
Show inline comments
 
################################################################################
 
################################################################################
 
# RhodeCode - Pylons environment configuration                                 #
 
# Kallithea - Pylons environment configuration                                 #
 
#                                                                              #
 
# The %(here)s variable will be replaced with the parent directory of this file#
 
################################################################################
 

	
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
################################################################################
 
## Uncomment and replace with the address which should receive                ##
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
## Additionally those settings will be used by Kallithea mailing system       ##
 
################################################################################
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = kallithea-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 
#email_prefix = [Kallithea]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username =
 
#smtp_password =
 
#smtp_port =
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 
#smtp_auth =
 

	
 
[server:main]
 
## PASTE ##
 
#use = egg:Paste#http
 
## nr of worker threads to spawn
 
#threadpool_workers = 5
 
## max request before thread respawn
 
#threadpool_max_requests = 10
 
## option to use threads of process
 
#use_threadpool = true
 

	
 
## WAITRESS ##
 
use = egg:waitress#main
 
## number of worker threads
 
threads = 5
 
@@ -140,124 +140,124 @@ use = egg:kallithea
 
full_stack = true
 
static_files = true
 
## Optional Languages
 
## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 

	
 
## perform a full repository scan on each server start, this should be
 
## set to false after first startup, to allow faster server restarts.
 
initial_repo_scan = true
 

	
 
## uncomment and set this path to use archive download cache
 
#archive_cache_dir = /tmp/tarballcache
 

	
 
## change this to unique ID for security
 
app_instance_uuid = ${app_instance_uuid}
 

	
 
## cut off limit for large diffs (size in bytes)
 
cut_off_limit = 256000
 

	
 
## use cache version of scm repo everywhere
 
vcs_full_cache = true
 

	
 
## force https in RhodeCode, fixes https redirects, assumes it's always https
 
## force https in Kallithea, fixes https redirects, assumes it's always https
 
force_https = false
 

	
 
## use Strict-Transport-Security headers
 
use_htsts = false
 

	
 
## number of commits stats will parse on each iteration
 
commit_parse_limit = 25
 

	
 
## use gravatar service to display avatars
 
use_gravatar = true
 

	
 
## path to git executable
 
git_path = git
 

	
 
## git rev filter option, --all is the default filter, if you need to
 
## hide all refs in changelog switch this to --branches --tags
 
git_rev_filter=--all
 

	
 
## RSS feed options
 
rss_cut_off_limit = 256000
 
rss_items_per_page = 10
 
rss_include_diff = false
 

	
 
## options for showing and identifying changesets
 
show_sha_length = 12
 
show_revision_number = true
 

	
 
## 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
 
## RhodeCode url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid>
 
## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid>
 
gist_alias_url =
 

	
 
## white list of API enabled controllers. This allows to add list of
 
## controllers to which access will be enabled by api_key. eg: to enable
 
## api access to raw_files put `FilesController:raw`, to enable access to patches
 
## add `ChangesetController:changeset_patch`. This list should be "," separated
 
## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
 
## Recommended settings bellow are commented out:
 
api_access_controllers_whitelist =
 
#    ChangesetController:changeset_patch,
 
#    ChangesetController:changeset_raw,
 
#    FilesController:raw,
 
#    FilesController:archivefile
 

	
 
## alternative_gravatar_url allows you to use your own avatar server application
 
## the following parts of the URL will be replaced
 
## {email}        user email
 
## {md5email}     md5 hash of the user email (like at gravatar.com)
 
## {size}         size of the image that is expected from the server application
 
## {scheme}       http/https from RhodeCode server
 
## {netloc}       network location from RhodeCode server
 
## {scheme}       http/https from Kallithea server
 
## {netloc}       network location from Kallithea server
 
#alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 
#alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 

	
 

	
 
## container auth options
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 

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

	
 
## overwrite schema of clone url
 
## available vars:
 
## scheme - http/https
 
## user - current user
 
## pass - password
 
## netloc - network location
 
## path - usually repo_name
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
## issue tracker for RhodeCode (leave blank to disable, absent for default)
 
## issue tracker for Kallithea (leave blank to disable, absent for default)
 
#bugtracker = https://bitbucket.org/conservancy/kallithea/issues
 

	
 
## issue tracking mapping for commits messages
 
## comment out issue_pat, issue_server, issue_prefix to enable
 

	
 
## pattern to get the issues from commit messages
 
## default one used here is #<numbers> with a regex passive group for `#`
 
## {id} will be all groups matched from this pattern
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## 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}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
 
## multiple patterns, to other issues server, wiki or others
 
@@ -379,49 +379,49 @@ beaker.session.secret = ${app_instance_u
 

	
 
## sets session as invalid if it haven't been accessed for given amount of time
 
beaker.session.timeout = 2592000
 
beaker.session.httponly = true
 
#beaker.session.cookie_path = /<your-prefix>
 

	
 
## uncomment for https secure cookie
 
beaker.session.secure = false
 

	
 
## auto save the session to not to use .save()
 
beaker.session.auto = False
 

	
 
## default cookie expiration time in seconds `true` expire at browser close ##
 
#beaker.session.cookie_expires = 3600
 

	
 

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

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

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

	
 
## errormator enabled
 
errormator = false
 

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

	
 
## TWEAK AMOUNT OF INFO SENT HERE
 

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

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

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

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

	
kallithea/config/environment.py
Show inline comments
 
@@ -42,49 +42,49 @@ from kallithea.model.scm import ScmModel
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def load_environment(global_conf, app_conf, initial=False,
 
                     test_env=None, test_index=None):
 
    """
 
    Configure the Pylons environment via the ``pylons.config``
 
    object
 
    """
 
    config = PylonsConfig()
 

	
 
    # Pylons paths
 
    root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
    paths = dict(
 
        root=root,
 
        controllers=os.path.join(root, 'controllers'),
 
        static_files=os.path.join(root, 'public'),
 
        templates=[os.path.join(root, 'templates')]
 
    )
 

	
 
    # Initialize config with the basic options
 
    config.init_app(global_conf, app_conf, package='kallithea', paths=paths)
 

	
 
    # store some globals into rhodecode
 
    # store some globals into kallithea
 
    kallithea.CELERY_ON = str2bool(config['app_conf'].get('use_celery'))
 
    kallithea.CELERY_EAGER = str2bool(config['app_conf'].get('celery.always.eager'))
 

	
 
    config['routes.map'] = make_map(config)
 
    config['pylons.app_globals'] = app_globals.Globals(config)
 
    config['pylons.h'] = helpers
 
    kallithea.CONFIG = config
 

	
 
    load_rcextensions(root_path=config['here'])
 

	
 
    # Setup cache object as early as possible
 
    import pylons
 
    pylons.cache._push_object(config['pylons.app_globals'].cache)
 

	
 
    # Create the Mako TemplateLookup, with the default auto-escaping
 
    config['pylons.app_globals'].mako_lookup = TemplateLookup(
 
        directories=paths['templates'],
 
        error_handler=handle_mako_error,
 
        module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
 
        input_encoding='utf-8', default_filters=['escape'],
 
        imports=['from webhelpers.html import escape'])
 

	
 
    # sets the c attribute access when don't existing attribute are accessed
 
    config['pylons.strict_tmpl_context'] = True
kallithea/config/post_receive_tmpl.py
Show inline comments
 
#!/usr/bin/env python
 
import os
 
import sys
 

	
 
try:
 
    import kallithea
 
    KALLITHEA_HOOK_VER = '_TMPL_'
 
    os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER
 
    from kallithea.lib.hooks import handle_git_post_receive as _handler
 
except ImportError:
 
    if os.environ.get('RC_DEBUG_GIT_HOOK'):
 
        import traceback
 
        print traceback.format_exc()
 
    kallithea = None
 

	
 

	
 
def main():
 
    if kallithea is None:
 
        # exit with success if we cannot import rhodecode !!
 
        # exit with success if we cannot import kallithea !!
 
        # this allows simply push to this repo even without
 
        # rhodecode
 
        # kallithea
 
        sys.exit(0)
 

	
 
    repo_path = os.path.abspath('.')
 
    push_data = sys.stdin.readlines()
 
    # os.environ is modified here by a subprocess call that
 
    # runs git and later git executes this hook.
 
    # Environ gets some additional info from rhodecode system
 
    # Environ gets some additional info from kallithea system
 
    # like IP or username from basic-auth
 
    _handler(repo_path, push_data, os.environ)
 
    sys.exit(0)
 

	
 
if __name__ == '__main__':
 
    main()
kallithea/config/pre_receive_tmpl.py
Show inline comments
 
#!/usr/bin/env python
 
import os
 
import sys
 

	
 
try:
 
    import kallithea
 
    KALLITHEA_HOOK_VER = '_TMPL_'
 
    os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER
 
    from kallithea.lib.hooks import handle_git_pre_receive as _handler
 
except ImportError:
 
    if os.environ.get('RC_DEBUG_GIT_HOOK'):
 
        import traceback
 
        print traceback.format_exc()
 
    kallithea = None
 

	
 

	
 
def main():
 
    if kallithea is None:
 
        # exit with success if we cannot import rhodecode !!
 
        # exit with success if we cannot import kallithea !!
 
        # this allows simply push to this repo even without
 
        # rhodecode
 
        # kallithea
 
        sys.exit(0)
 

	
 
    repo_path = os.path.abspath('.')
 
    push_data = sys.stdin.readlines()
 
    # os.environ is modified here by a subprocess call that
 
    # runs git and later git executes this hook.
 
    # Environ gets some additional info from rhodecode system
 
    # Environ gets some additional info from kallithea system
 
    # like IP or username from basic-auth
 
    _handler(repo_path, push_data, os.environ)
 
    sys.exit(0)
 

	
 
if __name__ == '__main__':
 
    main()
kallithea/config/rcextensions/__init__.py
Show inline comments
 
@@ -152,64 +152,64 @@ def _dluserhook(*args, **kwargs):
 
      :param short_contact:
 
      :param admin:
 
      :param lastname:
 
      :param ip_addresses:
 
      :param ldap_dn:
 
      :param email:
 
      :param api_key:
 
      :param last_login:
 
      :param full_name:
 
      :param active:
 
      :param password:
 
      :param emails:
 
      :param inherit_default_permissions:
 
      :param deleted_by:
 
    """
 
    return 0
 
DELETE_USER_HOOK = _dluserhook
 

	
 

	
 
#==============================================================================
 
# POST PUSH HOOK
 
#==============================================================================
 

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

	
 
      :param server_url: url of instance that triggered this hook
 
      :param config: path to .ini config used
 
      :param scm: type of VS 'git' or 'hg'
 
      :param username: name of user who pushed
 
      :param ip: ip of who pushed
 
      :param action: push
 
      :param repository: repository name
 
      :param pushed_revs: list of pushed revisions
 
    """
 
    return 0
 
PUSH_HOOK = _pushhook
 

	
 

	
 
#==============================================================================
 
# POST PULL HOOK
 
#==============================================================================
 

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

	
 
      :param server_url: url of instance that triggered this hook
 
      :param config: path to .ini config used
 
      :param scm: type of VS 'git' or 'hg'
 
      :param username: name of user who pulled
 
      :param ip: ip of who pulled
 
      :param action: pull
 
      :param repository: repository name
 
    """
 
    return 0
 
PULL_HOOK = _pullhook
kallithea/controllers/admin/admin.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.admin
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Controller for Admin panel of Rhodecode
 
Controller for Admin panel of Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 7, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
import logging
 

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

	
 
from kallithea.model.db import UserLog, User
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from kallithea.lib.base import BaseController, render
 
from kallithea.lib.utils2 import safe_int, remove_prefix, remove_suffix
 
from kallithea.lib.indexers import JOURNAL_SCHEMA
kallithea/controllers/admin/auth_settings.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.auth_settings
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
pluggable authentication controller for RhodeCode
 
pluggable authentication controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Nov 26, 2010
 
:author: akesterson
 
"""
 

	
 
import pprint
 
import logging
 
import formencode.htmlfill
 
import traceback
 

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

	
 
from sqlalchemy.exc import DatabaseError
 

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.compat import json, formatted_json
 
from kallithea.lib.base import BaseController, render
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from kallithea.lib import auth_modules
 
from kallithea.model.forms import AuthSettingsForm
kallithea/controllers/admin/defaults.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.defaults
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
default settings controller for Rhodecode
 
default settings controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 27, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 
import formencode
 
from formencode import htmlfill
 

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

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from kallithea.lib.base import BaseController, render
 
from kallithea.model.forms import DefaultsForm
 
from kallithea.model.meta import Session
 
from kallithea import BACKENDS
kallithea/controllers/admin/gists.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.gist
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
gist controller for RhodeCode
 
gist controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: May 9, 2013
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import time
 
import logging
 
import traceback
 
import formencode
 
from formencode import htmlfill
 

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

	
 
from kallithea.model.forms import GistForm
 
from kallithea.model.gist import GistModel
 
from kallithea.model.meta import Session
 
from kallithea.model.db import Gist, User
 
from kallithea.lib import helpers as h
kallithea/controllers/admin/my_account.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.my_account
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
my account controller for rhodecode admin
 
my account controller for Kallithea admin
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: August 20, 2013
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import time
 
import logging
 
import traceback
 
import formencode
 

	
 
from sqlalchemy import func, or_
 
from formencode import htmlfill
 
from pylons import request, tmpl_context as c, url
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, NotAnonymous, AuthUser
 
from kallithea.lib.base import BaseController, render
 
from kallithea.lib.utils2 import generate_api_key, safe_int
kallithea/controllers/admin/notifications.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.notifications
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
notifications controller for RhodeCode
 
notifications controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Nov 23, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 

	
 
from pylons import request
 
from pylons import tmpl_context as c, url
 
from pylons.controllers.util import redirect, abort
 
from webob.exc import HTTPBadRequest
 

	
 
from kallithea.model.db import Notification
 
from kallithea.model.notification import NotificationModel
 
from kallithea.model.meta import Session
 
from kallithea.lib.auth import LoginRequired, NotAnonymous
 
from kallithea.lib.base import BaseController, render
 
from kallithea.lib import helpers as h
 
from kallithea.lib.helpers import Page
kallithea/controllers/admin/permissions.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.permissions
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
permissions controller for Rhodecode
 
permissions controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 27, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
import logging
 
import traceback
 
import formencode
 
from formencode import htmlfill
 

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

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator,\
 
    AuthUser
 
from kallithea.lib.base import BaseController, render
 
from kallithea.model.forms import DefaultPermissionsForm
kallithea/controllers/admin/repo_groups.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.repo_groups
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Repository groups controller for RhodeCode
 
Repository groups controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Mar 23, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 
import formencode
 
import itertools
 

	
 
from formencode import htmlfill
 

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

	
 
from sqlalchemy.exc import IntegrityError
 

	
 
import kallithea
 
from kallithea.lib import helpers as h
kallithea/controllers/admin/repos.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.repos
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Repositories controller for RhodeCode
 
Repositories controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 7, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 
import formencode
 
from formencode import htmlfill
 
from webob.exc import HTTPInternalServerError, HTTPForbidden, HTTPNotFound
 
from pylons import request, tmpl_context as c, url
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 
from sqlalchemy.sql.expression import func
 

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator, \
 
    HasRepoPermissionAllDecorator, NotAnonymous,HasPermissionAny, \
 
    HasRepoGroupPermissionAny, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
kallithea/controllers/admin/settings.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.admin.settings
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
settings controller for rhodecode admin
 
settings controller for Kallithea admin
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Jul 14, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import time
 
import logging
 
import traceback
 
import formencode
 

	
 
from formencode import htmlfill
 
from pylons import request, tmpl_context as c, url, config
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from kallithea.lib.base import BaseController, render
 
from kallithea.lib.celerylib import tasks, run_task
 
from kallithea.lib.exceptions import HgsubversionImportError
 
@@ -330,51 +330,51 @@ class SettingsController(BaseController)
 
            except Exception:
 
                log.error(traceback.format_exc())
 
                h.flash(_('Error occurred during updating '
 
                          'visualisation settings'),
 
                        category='error')
 

	
 
            return redirect(url('admin_settings_visual'))
 

	
 
        defaults = Setting.get_app_settings()
 
        defaults.update(self._get_hg_ui_settings())
 

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

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def settings_email(self):
 
        """GET /admin/settings/email: All items in the collection"""
 
        # url('admin_settings_email')
 
        c.active = 'email'
 
        if request.POST:
 
            test_email = request.POST.get('test_email')
 
            test_email_subj = 'RhodeCode test email'
 
            test_email_body = ('RhodeCode Email test, '
 
                               'RhodeCode version: %s' % c.kallithea_version)
 
            test_email_subj = 'Kallithea test email'
 
            test_email_body = ('Kallithea Email test, '
 
                               'Kallithea version: %s' % c.kallithea_version)
 
            if not test_email:
 
                h.flash(_('Please enter email address'), category='error')
 
                return redirect(url('admin_settings_email'))
 

	
 
            test_email_html_body = EmailNotificationModel()\
 
                .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT,
 
                                body=test_email_body)
 

	
 
            recipients = [test_email] if test_email else None
 

	
 
            run_task(tasks.send_email, recipients, test_email_subj,
 
                     test_email_body, test_email_html_body)
 

	
 
            h.flash(_('Send email task created'), category='success')
 
            return redirect(url('admin_settings_email'))
 

	
 
        defaults = Setting.get_app_settings()
 
        defaults.update(self._get_hg_ui_settings())
 

	
 
        import kallithea
 
        c.rhodecode_ini = kallithea.CONFIG
 

	
 
        return htmlfill.render(
 
            render('admin/settings/settings.html'),
 
@@ -473,48 +473,48 @@ class SettingsController(BaseController)
 
            render('admin/settings/settings.html'),
 
            defaults=defaults,
 
            encoding="UTF-8",
 
            force_defaults=False)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def settings_system_update(self):
 
        """GET /admin/settings/system/updates: All items in the collection"""
 
        # url('admin_settings_system_update')
 
        import json
 
        import urllib2
 
        from kallithea.lib.verlib import NormalizedVersion
 
        from kallithea import __version__
 

	
 
        defaults = Setting.get_app_settings()
 
        defaults.update(self._get_hg_ui_settings())
 
        _update_url = defaults.get('rhodecode_update_url', '')
 

	
 
        _err = lambda s: '<div style="color:#ff8888; padding:4px 0px">%s</div>' % (s)
 
        try:
 
            import kallithea
 
            ver = kallithea.__version__
 
            log.debug('Checking for upgrade on `%s` server' % _update_url)
 
            opener = urllib2.build_opener()
 
            opener.addheaders = [('User-agent', 'RhodeCode-SCM/%s' % ver)]
 
            opener.addheaders = [('User-agent', 'Kallithea-SCM/%s' % ver)]
 
            response = opener.open(_update_url)
 
            response_data = response.read()
 
            data = json.loads(response_data)
 
        except urllib2.URLError, e:
 
            log.error(traceback.format_exc())
 
            return _err('Failed to contact upgrade server: %r' % e)
 
        except ValueError, e:
 
            log.error(traceback.format_exc())
 
            return _err('Bad data sent from update server')
 

	
 
        latest = data['versions'][0]
 

	
 
        c.update_url = _update_url
 
        c.latest_data = latest
 
        c.latest_ver = latest['version']
 
        c.cur_ver = __version__
 
        c.should_upgrade = False
 

	
 
        if NormalizedVersion(c.latest_ver) > NormalizedVersion(c.cur_ver):
 
            c.should_upgrade = True
 
        c.important_notices = latest['general']
 

	
 
        return render('admin/settings/settings_system_update.html'),
kallithea/controllers/admin/users.py
Show inline comments
 
@@ -102,79 +102,79 @@ class UsersController(BaseController):
 
                "firstname": user.name,
 
                "lastname": user.lastname,
 
                "last_login": h.fmt_date(user.last_login),
 
                "last_login_raw": datetime_to_time(user.last_login),
 
                "active": h.boolicon(user.active),
 
                "admin": h.boolicon(user.admin),
 
                "extern_type": user.extern_type,
 
                "extern_name": user.extern_name,
 
                "action": user_actions(user.user_id, user.username),
 
            })
 

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

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

	
 
    def create(self):
 
        """POST /users: Create a new item"""
 
        # url('users')
 
        c.default_extern_type = auth_modules.auth_internal.RhodeCodeAuthPlugin.name
 
        c.default_extern_type = auth_modules.auth_internal.KallitheaAuthPlugin.name
 
        user_model = UserModel()
 
        user_form = UserForm()()
 
        try:
 
            form_result = user_form.to_python(dict(request.POST))
 
            user_model.create(form_result)
 
            usr = form_result['username']
 
            action_logger(self.authuser, 'admin_created_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('Created user %s') % usr,
 
                    category='success')
 
            Session().commit()
 
        except formencode.Invalid, errors:
 
            return htmlfill.render(
 
                render('admin/users/user_add.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except UserCreationError, e:
 
            h.flash(e, 'error')
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('Error occurred during creation of user %s') \
 
                    % request.POST.get('username'), category='error')
 
        return redirect(url('users'))
 

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

	
 
    def update(self, id):
 
        """PUT /users/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
 
        #    h.form(url('update_user', id=ID),
 
        #           method='put')
 
        # url('user', id=ID)
 
        c.active = 'profile'
 
        user_model = UserModel()
 
        c.user = user_model.get(id)
 
        c.extern_type = c.user.extern_type
 
        c.extern_name = c.user.extern_name
 
        c.perm_user = AuthUser(user_id=id, ip_addr=self.ip_addr)
 
        _form = UserForm(edit=True, old_data={'user_id': id,
 
                                              'email': c.user.email})()
 
        form_result = {}
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            skip_attrs = ['extern_type', 'extern_name']
 
            #TODO: plugin should define if username can be updated
 
            if c.extern_type != "internal":
kallithea/controllers/api/api.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.api
 
~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
API controller for RhodeCode
 
API controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Aug 20, 2011
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
import time
 
import traceback
 
import logging
 
from sqlalchemy import or_
 

	
 
from kallithea.controllers.api import JSONRPCController, JSONRPCError
 
from kallithea.lib.auth import (
 
    PasswordGenerator, AuthUser, HasPermissionAllDecorator,
 
    HasPermissionAnyDecorator, HasPermissionAnyApi, HasRepoPermissionAnyApi,
 
    HasRepoGroupPermissionAnyApi, HasUserGroupPermissionAny)
 
from kallithea.lib.utils import map_groups, repo2db_mapper
 
from kallithea.lib.utils2 import (
 
    str2bool, time_to_datetime, safe_int, Optional, OAttr)
 
from kallithea.model.meta import Session
 
@@ -452,102 +452,102 @@ class ApiController(JSONRPCController):
 

	
 
        ret = []
 
        if isinstance(userid, Optional):
 
            user = None
 
        else:
 
            user = get_user_or_error(userid)
 

	
 
        # show all locks
 
        for r in Repository.getAll():
 
            userid, time_ = r.locked
 
            if time_:
 
                _api_data = r.get_api_data()
 
                # if we use userfilter just show the locks for this user
 
                if user:
 
                    if safe_int(userid) == user.user_id:
 
                        ret.append(_api_data)
 
                else:
 
                    ret.append(_api_data)
 

	
 
        return ret
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_ip(self, apiuser, userid=Optional(OAttr('apiuser'))):
 
        """
 
        Shows IP address as seen from RhodeCode server, together with all
 
        Shows IP address as seen from Kallithea server, together with all
 
        defined IP addresses for given user. If userid is not passed data is
 
        returned for user who's calling this function.
 
        This command can be executed only using api_key belonging to user with
 
        admin rights.
 

	
 
        :param apiuser: filled automatically from apikey
 
        :type apiuser: AuthUser
 
        :param userid: username to show ips for
 
        :type userid: Optional(str or int)
 

	
 
        OUTPUT::
 

	
 
            id : <id_given_in_input>
 
            result : {
 
                         "server_ip_addr": "<ip_from_clien>",
 
                         "user_ips": [
 
                                        {
 
                                           "ip_addr": "<ip_with_mask>",
 
                                           "ip_range": ["<start_ip>", "<end_ip>"],
 
                                        },
 
                                        ...
 
                                     ]
 
            }
 

	
 
        """
 
        if isinstance(userid, Optional):
 
            userid = apiuser.user_id
 
        user = get_user_or_error(userid)
 
        ips = UserIpMap.query().filter(UserIpMap.user == user).all()
 
        return dict(
 
            server_ip_addr=self.ip_addr,
 
            user_ips=ips
 
        )
 

	
 
    # alias for old
 
    show_ip = get_ip
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_server_info(self, apiuser):
 
        """
 
        return server info, including RhodeCode version and installed packages
 
        return server info, including Kallithea version and installed packages
 

	
 
        :param apiuser: filled automatically from apikey
 
        :type apiuser: AuthUser
 

	
 
        OUTPUT::
 

	
 
          id : <id_given_in_input>
 
          result : {
 
            'modules': [<module name>,...]
 
            'py_version': <python version>,
 
            'platform': <platform type>,
 
            'kallithea_version': <rhodecode version>
 
            'kallithea_version': <kallithea version>
 
          }
 
          error :  null
 
        """
 
        return Setting.get_server_info()
 

	
 
    def get_user(self, apiuser, userid=Optional(OAttr('apiuser'))):
 
        """
 
        Get's an user by username or user_id, Returns empty result if user is
 
        not found. If userid param is skipped it is set to id of user who is
 
        calling this method. This command can be executed only using api_key
 
        belonging to user with admin rights, or regular users that cannot
 
        specify different userid than theirs
 

	
 
        :param apiuser: filled automatically from apikey
 
        :type apiuser: AuthUser
 
        :param userid: user to get data for
 
        :type userid: Optional(str or int)
 

	
 
        OUTPUT::
 

	
 
            id : <id_given_in_input>
 
            result: None if user does not exist or
 
                    {
 
                        "user_id" :     "<user_id>",
 
@@ -1435,49 +1435,49 @@ class ApiController(JSONRPCController):
 

	
 
        OUTPUT::
 

	
 
            id : <id_given_in_input>
 
            result: {
 
                      "msg": "Created new repository `<reponame>`",
 
                      "success": true,
 
                      "task": "<celery task id or None if done sync>"
 
                    }
 
            error:  null
 

	
 
        ERROR OUTPUT::
 

	
 
          id : <id_given_in_input>
 
          result : null
 
          error :  {
 
             'failed to create repository `<repo_name>`
 
          }
 

	
 
        """
 
        if not HasPermissionAnyApi('hg.admin')(user=apiuser):
 
            if not isinstance(owner, Optional):
 
                #forbid setting owner for non-admins
 
                raise JSONRPCError(
 
                    'Only RhodeCode admin can specify `owner` param'
 
                    'Only Kallithea admin can specify `owner` param'
 
                )
 
        if isinstance(owner, Optional):
 
            owner = apiuser.user_id
 

	
 
        owner = get_user_or_error(owner)
 

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

	
 
        defs = Setting.get_default_repo_settings(strip_prefix=True)
 
        if isinstance(private, Optional):
 
            private = defs.get('repo_private') or Optional.extract(private)
 
        if isinstance(repo_type, Optional):
 
            repo_type = defs.get('repo_type')
 
        if isinstance(enable_statistics, Optional):
 
            enable_statistics = defs.get('repo_enable_statistics')
 
        if isinstance(enable_locking, Optional):
 
            enable_locking = defs.get('repo_enable_locking')
 
        if isinstance(enable_downloads, Optional):
 
            enable_downloads = defs.get('repo_enable_downloads')
 

	
 
        clone_uri = Optional.extract(clone_uri)
 
        description = Optional.extract(description)
 
        landing_rev = Optional.extract(landing_rev)
 
@@ -1629,49 +1629,49 @@ class ApiController(JSONRPCController):
 
                      "msg": "Created fork of `<reponame>` as `<forkname>`",
 
                      "success": true,
 
                      "task": "<celery task id or None if done sync>"
 
                    }
 
            error:  null
 

	
 
        """
 
        repo = get_repo_or_error(repoid)
 
        repo_name = repo.repo_name
 

	
 
        _repo = RepoModel().get_by_repo_name(fork_name)
 
        if _repo:
 
            type_ = 'fork' if _repo.fork else 'repo'
 
            raise JSONRPCError("%s `%s` already exist" % (type_, fork_name))
 

	
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser):
 
            pass
 
        elif HasRepoPermissionAnyApi('repository.admin',
 
                                     'repository.write',
 
                                     'repository.read')(user=apiuser,
 
                                                        repo_name=repo.repo_name):
 
            if not isinstance(owner, Optional):
 
                #forbid setting owner for non-admins
 
                raise JSONRPCError(
 
                    'Only RhodeCode admin can specify `owner` param'
 
                    'Only Kallithea admin can specify `owner` param'
 
                )
 
        else:
 
            raise JSONRPCError('repository `%s` does not exist' % (repoid,))
 

	
 
        if isinstance(owner, Optional):
 
            owner = apiuser.user_id
 

	
 
        owner = get_user_or_error(owner)
 

	
 
        try:
 
            # create structure of groups and return the last group
 
            group = map_groups(fork_name)
 

	
 
            form_data = dict(
 
                repo_name=fork_name,
 
                repo_name_full=fork_name,
 
                repo_group=group,
 
                repo_type=repo.repo_type,
 
                description=Optional.extract(description),
 
                private=Optional.extract(private),
 
                copy_permissions=Optional.extract(copy_permissions),
 
                landing_rev=Optional.extract(landing_rev),
 
                update_after_clone=False,
 
                fork_parent_id=repo.repo_id,
kallithea/controllers/bookmarks.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.bookmarks
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Bookmarks controller for rhodecode
 
Bookmarks controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Dec 1, 2011
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 

	
 
from pylons import tmpl_context as c
 

	
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.compat import OrderedDict
 
from webob.exc import HTTPNotFound
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class BookmarksController(BaseRepoController):
 

	
 
    def __before__(self):
kallithea/controllers/branches.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.branches
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
branches controller for rhodecode
 
branches controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 21, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import binascii
 

	
 
from pylons import tmpl_context as c
 

	
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.compat import OrderedDict
 
from kallithea.lib.utils2 import safe_unicode
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class BranchesController(BaseRepoController):
 

	
kallithea/controllers/changelog.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.changelog
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
changelog controller for rhodecode
 
changelog controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 21, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 

	
 
from pylons import request, url, session, tmpl_context as c
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 
from webob.exc import HTTPNotFound, HTTPBadRequest
 

	
 
import kallithea.lib.helpers as h
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.helpers import RepoPage
 
from kallithea.lib.compat import json
 
from kallithea.lib.graphmod import _colored, _dagwalker
 
from kallithea.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\
kallithea/controllers/error.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.error
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
RhodeCode error controller
 
Kallithea error controller
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Dec 8, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import os
 
import cgi
 
import logging
 
import paste.fileapp
 

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

	
 
from kallithea.lib.base import BaseController, render
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class ErrorController(BaseController):
kallithea/controllers/feed.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.feed
 
~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Feed controller for rhodecode
 
Feed controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 23, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
import logging
 

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

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

	
 
from kallithea.lib import helpers as h
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController
 
from kallithea.lib.diffs import DiffProcessor, LimitedDiffContainer
 
from kallithea.model.db import CacheInvalidation
 
from kallithea.lib.utils2 import safe_int, str2bool, safe_unicode
kallithea/controllers/files.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.files
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Files controller for RhodeCode
 
Files controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 21, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
from __future__ import with_statement
 
import os
 
import logging
 
import traceback
 
import tempfile
 
import shutil
 

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

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

	
 
@@ -300,49 +300,49 @@ class FilesController(BaseRepoController
 
        if repo.enable_locking and repo.locked[0]:
 
            h.flash(_('This repository is has been locked by %s on %s')
 
                % (h.person_by_id(repo.locked[0]),
 
                   h.fmt_date(h.time_to_datetime(repo.locked[1]))),
 
                'warning')
 
            return redirect(h.url('files_home',
 
                                  repo_name=repo_name, revision='tip'))
 

	
 
        # check if revision is a branch identifier- basically we cannot
 
        # create multiple heads via file editing
 
        _branches = repo.scm_instance.branches
 
        # check if revision is a branch name or branch hash
 
        if revision not in _branches.keys() + _branches.values():
 
            h.flash(_('You can only delete files with revision '
 
                      'being a valid branch '), category='warning')
 
            return redirect(h.url('files_home',
 
                                  repo_name=repo_name, revision='tip',
 
                                  f_path=f_path))
 

	
 
        r_post = request.POST
 

	
 
        c.cs = self.__get_cs_or_redirect(revision, repo_name)
 
        c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
 

	
 
        c.default_message = _('Deleted file %s via RhodeCode') % (f_path)
 
        c.default_message = _('Deleted file %s via Kallithea') % (f_path)
 
        c.f_path = f_path
 
        node_path = f_path
 
        author = self.authuser.full_contact
 

	
 
        if r_post:
 
            message = r_post.get('message') or c.default_message
 

	
 
            try:
 
                nodes = {
 
                    node_path: {
 
                        'content': ''
 
                    }
 
                }
 
                self.scm_model.delete_nodes(
 
                    user=c.authuser.user_id, repo=c.db_repo,
 
                    message=message,
 
                    nodes=nodes,
 
                    parent_cs=c.cs,
 
                    author=author,
 
                )
 

	
 
                h.flash(_('Successfully deleted file %s') % f_path,
 
                        category='success')
 
            except Exception:
 
@@ -363,49 +363,49 @@ class FilesController(BaseRepoController
 
                   h.fmt_date(h.time_to_datetime(repo.locked[1]))),
 
                'warning')
 
            return redirect(h.url('files_home',
 
                                  repo_name=repo_name, revision='tip'))
 

	
 
        # check if revision is a branch identifier- basically we cannot
 
        # create multiple heads via file editing
 
        _branches = repo.scm_instance.branches
 
        # check if revision is a branch name or branch hash
 
        if revision not in _branches.keys() + _branches.values():
 
            h.flash(_('You can only edit files with revision '
 
                      'being a valid branch '), category='warning')
 
            return redirect(h.url('files_home',
 
                                  repo_name=repo_name, revision='tip',
 
                                  f_path=f_path))
 

	
 
        r_post = request.POST
 

	
 
        c.cs = self.__get_cs_or_redirect(revision, repo_name)
 
        c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
 

	
 
        if c.file.is_binary:
 
            return redirect(url('files_home', repo_name=c.repo_name,
 
                            revision=c.cs.raw_id, f_path=f_path))
 
        c.default_message = _('Edited file %s via RhodeCode') % (f_path)
 
        c.default_message = _('Edited file %s via Kallithea') % (f_path)
 
        c.f_path = f_path
 

	
 
        if r_post:
 

	
 
            old_content = c.file.content
 
            sl = old_content.splitlines(1)
 
            first_line = sl[0] if sl else ''
 
            # modes:  0 - Unix, 1 - Mac, 2 - DOS
 
            mode = detect_mode(first_line, 0)
 
            content = convert_line_endings(r_post.get('content', ''), mode)
 

	
 
            message = r_post.get('message') or c.default_message
 
            author = self.authuser.full_contact
 

	
 
            if content == old_content:
 
                h.flash(_('No changes'), category='warning')
 
                return redirect(url('changeset_home', repo_name=c.repo_name,
 
                                    revision='tip'))
 
            try:
 
                self.scm_model.commit_change(repo=c.db_repo_scm_instance,
 
                                             repo_name=repo_name, cs=c.cs,
 
                                             user=self.authuser.user_id,
 
                                             author=author, message=message,
 
                                             content=content, f_path=f_path)
 
@@ -416,49 +416,49 @@ class FilesController(BaseRepoController
 
                h.flash(_('Error occurred during commit'), category='error')
 
            return redirect(url('changeset_home',
 
                                repo_name=c.repo_name, revision='tip'))
 

	
 
        return render('files/files_edit.html')
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
 
    def add(self, repo_name, revision, f_path):
 

	
 
        repo = Repository.get_by_repo_name(repo_name)
 
        if repo.enable_locking and repo.locked[0]:
 
            h.flash(_('This repository is has been locked by %s on %s')
 
                % (h.person_by_id(repo.locked[0]),
 
                   h.fmt_date(h.time_to_datetime(repo.locked[1]))),
 
                  'warning')
 
            return redirect(h.url('files_home',
 
                                  repo_name=repo_name, revision='tip'))
 

	
 
        r_post = request.POST
 
        c.cs = self.__get_cs_or_redirect(revision, repo_name,
 
                                         redirect_after=False)
 
        if c.cs is None:
 
            c.cs = EmptyChangeset(alias=c.db_repo_scm_instance.alias)
 
        c.default_message = (_('Added file via RhodeCode'))
 
        c.default_message = (_('Added file via Kallithea'))
 
        c.f_path = f_path
 

	
 
        if r_post:
 
            unix_mode = 0
 
            content = convert_line_endings(r_post.get('content', ''), unix_mode)
 

	
 
            message = r_post.get('message') or c.default_message
 
            filename = r_post.get('filename')
 
            location = r_post.get('location', '')
 
            file_obj = r_post.get('upload_file', None)
 

	
 
            if file_obj is not None and hasattr(file_obj, 'filename'):
 
                filename = file_obj.filename
 
                content = file_obj.file
 

	
 
                if hasattr(content, 'file'):
 
                    # non posix systems store real file under file attr
 
                    content = content.file
 

	
 
            if not content:
 
                h.flash(_('No content'), category='warning')
 
                return redirect(url('changeset_home', repo_name=c.repo_name,
 
                                    revision='tip'))
 
            if not filename:
kallithea/controllers/followers.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.followers
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Followers controller for rhodecode
 
Followers controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 23, 2011
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 

	
 
from pylons import tmpl_context as c, request
 

	
 
from kallithea.lib.helpers import Page
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.model.db import Repository, User, UserFollowing
 
from kallithea.lib.utils2 import safe_int
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class FollowersController(BaseRepoController):
 

	
kallithea/controllers/forks.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.forks
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
forks controller for rhodecode
 
forks controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 23, 2011
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import formencode
 
import traceback
 
from formencode import htmlfill
 

	
 
from pylons import tmpl_context as c, request, url
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 
from webob.exc import HTTPNotFound, HTTPInternalServerError
 

	
 
import kallithea.lib.helpers as h
 

	
 
from kallithea.lib.helpers import Page
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \
 
    NotAnonymous, HasRepoPermissionAny, HasPermissionAnyDecorator
kallithea/controllers/home.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.home
 
~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Home controller for Rhodecode
 
Home controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Feb 18, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 

	
 
"""
 

	
 
import logging
 

	
 
from pylons import tmpl_context as c, request
 
from pylons.i18n.translation import _
 
from webob.exc import HTTPBadRequest
 
from sqlalchemy.sql.expression import func
 

	
 
import kallithea
 
from kallithea.lib import helpers as h
 
from kallithea.lib.utils import jsonify, conditional_cache
 
from kallithea.lib.compat import json
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseController, render
 
from kallithea.model.db import Repository, RepoGroup
kallithea/controllers/login.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.login
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Login controller for rhodeocode
 
Login controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 22, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 

	
 
import logging
 
import formencode
 
import datetime
 
import urlparse
 

	
 
from formencode import htmlfill
 
from webob.exc import HTTPFound
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons import request, session, tmpl_context as c, url
 

	
 
import kallithea.lib.helpers as h
 
from kallithea.lib.auth import AuthUser, HasPermissionAnyDecorator
 
from kallithea.lib.auth_modules import importplugin
 
@@ -169,49 +169,49 @@ class LoginController(BaseController):
 
        captcha_private_key = settings.get('rhodecode_captcha_private_key')
 
        c.captcha_active = bool(captcha_private_key)
 
        c.captcha_public_key = settings.get('rhodecode_captcha_public_key')
 

	
 
        if request.POST:
 
            register_form = RegisterForm()()
 
            try:
 
                form_result = register_form.to_python(dict(request.POST))
 
                form_result['active'] = c.auto_active
 

	
 
                if c.captcha_active:
 
                    from kallithea.lib.recaptcha import submit
 
                    response = submit(request.POST.get('recaptcha_challenge_field'),
 
                                      request.POST.get('recaptcha_response_field'),
 
                                      private_key=captcha_private_key,
 
                                      remoteip=self.ip_addr)
 
                    if c.captcha_active and not response.is_valid:
 
                        _value = form_result
 
                        _msg = _('bad captcha')
 
                        error_dict = {'recaptcha_field': _msg}
 
                        raise formencode.Invalid(_msg, _value, None,
 
                                                 error_dict=error_dict)
 

	
 
                UserModel().create_registration(form_result)
 
                h.flash(_('You have successfully registered into RhodeCode'),
 
                h.flash(_('You have successfully registered into Kallithea'),
 
                        category='success')
 
                Session().commit()
 
                return redirect(url('login_home'))
 

	
 
            except formencode.Invalid, errors:
 
                return htmlfill.render(
 
                    render('/register.html'),
 
                    defaults=errors.value,
 
                    errors=errors.error_dict or {},
 
                    prefix_error=False,
 
                    encoding="UTF-8")
 
            except UserCreationError, e:
 
                # container auth or other auth functions that create users on
 
                # the fly can throw this exception signaling that there's issue
 
                # with user creation, explanation should be provided in
 
                # Exception itself
 
                h.flash(e, 'error')
 

	
 
        return render('/register.html')
 

	
 
    def password_reset(self):
 
        settings = Setting.get_app_settings()
 
        captcha_private_key = settings.get('rhodecode_captcha_private_key')
 
        c.captcha_active = bool(captcha_private_key)
kallithea/controllers/pullrequests.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.pullrequests
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
pull requests controller for rhodecode for initializing pull requests
 
pull requests controller for Kallithea for initializing pull requests
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: May 7, 2012
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import logging
 
import traceback
 
import formencode
 

	
 
from webob.exc import HTTPNotFound, HTTPForbidden
 
from collections import defaultdict
 
from itertools import groupby
 

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

	
 
from kallithea.lib.compat import json
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
kallithea/controllers/search.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.search
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Search controller for RhodeCode
 
Search controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Aug 7, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

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

	
 
from whoosh.index import open_dir, EmptyIndexError
 
from whoosh.qparser import QueryParser, QueryParserError
 
from whoosh.query import Phrase, Wildcard, Term, Prefix
 
from webhelpers.util import update_params
 

	
 
from kallithea.lib.auth import LoginRequired
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \
 
    IDX_NAME, WhooshResultWrapper
kallithea/controllers/summary.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.summary
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Summary controller for Rhodecode
 
Summary controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 18, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import traceback
 
import calendar
 
import logging
 
import urllib
 
from time import mktime
 
from datetime import timedelta, date
 
from urlparse import urlparse
 

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

	
 
from beaker.cache import cache_region, region_invalidate
 

	
 
from kallithea.lib.compat import product
kallithea/controllers/tags.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
"""
 
kallithea.controllers.tags
 
~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
Tags controller for rhodecode
 
Tags controller for Kallithea
 

	
 
This file was forked by the Kallithea project in July 2014.
 
Original author and date, and relevant copyright and licensing information is below:
 
:created_on: Apr 21, 2010
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 

	
 
"""
 

	
 
import logging
 

	
 
from pylons import tmpl_context as c
 

	
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from kallithea.lib.base import BaseRepoController, render
 
from kallithea.lib.compat import OrderedDict
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class TagsController(BaseRepoController):
 

	
 
    def __before__(self):
kallithea/i18n/de/LC_MESSAGES/kallithea.po
Show inline comments
 
# Translations template for RhodeCode.
 
# Translations template for Kallithea.
 
# Copyright (C) 2014 RhodeCode GmbH, and others.
 
# This file is distributed under the same license as the RhodeCode project.
 
# This file is distributed under the same license as the Kallithea project.
 
# Translators:
 
# stephanj <info@stephan-jauernick.de>, 2013
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode\n"
 
"Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
 
"Project-Id-Version: Kallithea\n"
 
"Report-Msgid-Bugs-To: translations@kallithea-scm.org\n"
 
"POT-Creation-Date: 2014-02-13 15:30+0100\n"
 
"PO-Revision-Date: 2014-02-13 14:34+0000\n"
 
"Last-Translator: marcinkuzminski <marcin@python-blog.com>\n"
 
"Language-Team: German (http://www.transifex.com/projects/p/RhodeCode/language/de/)\n"
 
"Language-Team: German (http://www.transifex.com/projects/p/Kallithea/language/de/)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=UTF-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 
"Language: de\n"
 
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 

	
 
#: kallithea/controllers/changelog.py:88 kallithea/controllers/compare.py:88
 
#: kallithea/controllers/pullrequests.py:263
 
msgid "There are no changesets yet"
 
msgstr ""
 

	
 
#: kallithea/controllers/changelog.py:184
 
msgid "All Branches"
 
msgstr "Alle Branches"
 

	
 
#: kallithea/controllers/changelog.py:187
 
msgid "(closed)"
 
msgstr ""
 

	
 
#: kallithea/controllers/changeset.py:85
 
msgid "Show white space"
 
msgstr ""
 

	
 
@@ -117,81 +117,81 @@ msgstr ""
 
msgid "%s committed on %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:90
 
msgid "Click here to add new file"
 
msgstr ""
 

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

	
 
#: kallithea/controllers/files.py:299 kallithea/controllers/files.py:359
 
#: kallithea/controllers/files.py:426
 
#, python-format
 
msgid "This repository is has been locked by %s on %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:311
 
msgid "You can only delete files with revision being a valid branch "
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:322
 
#, python-format
 
msgid "Deleted file %s via RhodeCode"
 
msgid "Deleted file %s via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:344
 
#, python-format
 
msgid "Successfully deleted file %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:348 kallithea/controllers/files.py:414
 
#: kallithea/controllers/files.py:496
 
msgid "Error occurred during commit"
 
msgstr "Während des Commitens trat ein Fehler auf"
 

	
 
#: kallithea/controllers/files.py:371
 
msgid "You can only edit files with revision being a valid branch "
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:385
 
#, python-format
 
msgid "Edited file %s via RhodeCode"
 
msgid "Edited file %s via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:401
 
msgid "No changes"
 
msgstr "Keine Änderungen"
 

	
 
#: kallithea/controllers/files.py:410 kallithea/controllers/files.py:485
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "Der Commit zu %s war erfolgreich"
 

	
 
#: kallithea/controllers/files.py:438
 
msgid "Added file via RhodeCode"
 
msgid "Added file via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:459
 
msgid "No content"
 
msgstr "Kein Inhalt"
 

	
 
#: kallithea/controllers/files.py:463
 
msgid "No filename"
 
msgstr "Kein Dateiname"
 

	
 
#: kallithea/controllers/files.py:488
 
msgid "Location must be relative path and must not contain .. in path"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:522
 
msgid "Downloads disabled"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:533
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "Unbekannte Revision %s"
 

	
 
#: kallithea/controllers/files.py:535
 
@@ -254,49 +254,49 @@ msgid "Branch"
 
msgstr ""
 

	
 
#: kallithea/controllers/home.py:133
 
msgid "Tag"
 
msgstr ""
 

	
 
#: kallithea/controllers/home.py:139
 
msgid "Bookmark"
 
msgstr ""
 

	
 
#: kallithea/controllers/journal.py:112 kallithea/controllers/journal.py:155
 
msgid "public journal"
 
msgstr "Öffentliches Logbuch"
 

	
 
#: kallithea/controllers/journal.py:116 kallithea/controllers/journal.py:159
 
#: kallithea/templates/journal/journal.html:15
 
msgid "journal"
 
msgstr "Logbuch"
 

	
 
#: kallithea/controllers/login.py:185 kallithea/controllers/login.py:230
 
msgid "bad captcha"
 
msgstr ""
 

	
 
#: kallithea/controllers/login.py:191
 
msgid "You have successfully registered into RhodeCode"
 
msgid "You have successfully registered into Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/login.py:235
 
msgid "Your password reset link was sent"
 
msgstr "Ihr Passwort Zurücksetzen link wurde versendet"
 

	
 
#: kallithea/controllers/login.py:255
 
msgid ""
 
"Your password reset was successful, new password has been sent to your email"
 
msgstr "Das Zurücksetzen des Passworted war erfolgreich, ein neues Passwort wurde an ihre EMail Addresse gesendet"
 

	
 
#: kallithea/controllers/pullrequests.py:138
 
#: kallithea/templates/changeset/changeset.html:13
 
#: kallithea/templates/email_templates/changeset_comment.html:15
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: kallithea/controllers/pullrequests.py:155
 
msgid "Special"
 
msgstr ""
 

	
 
#: kallithea/controllers/pullrequests.py:156
 
msgid "Peer branches"
 
msgstr ""
 
@@ -1081,49 +1081,49 @@ msgstr "[akutalisiert] Benutzer"
 
msgid "[created] user group"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:769
 
msgid "[updated] user group"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:771
 
msgid "[commented] on revision in repository"
 
msgstr "[kommentiert]  revision in Repository"
 

	
 
#: kallithea/lib/helpers.py:773
 
msgid "[commented] on pull request for"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:775
 
msgid "[closed] pull request for"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:777
 
msgid "[pushed] into"
 
msgstr "[übermittelt] in"
 

	
 
#: kallithea/lib/helpers.py:779
 
msgid "[committed via RhodeCode] into repository"
 
msgid "[committed via Kallithea] into repository"
 
msgstr ""
 

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

	
 
#: kallithea/lib/helpers.py:783
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:785
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:787
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:1102
 
#, python-format
 
msgid " and %s more"
 
msgstr "und %s weitere"
 

	
 
#: kallithea/lib/helpers.py:1106
 
@@ -1298,50 +1298,50 @@ msgstr "Repository Gruppe hat lesenden Z
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310
 
msgid "Repositories Group write access"
 
msgstr "Repository Gruppe hat schreibenden Zugriff"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1172
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1191
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311
 
msgid "Repositories Group admin access"
 
msgstr "Repository Gruppe hat Administrativen Zugriff"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1657
 
msgid "RhodeCode Administrator"
 
msgstr "RhodeCode Administrator"
 
msgid "Kallithea Administrator"
 
msgstr "Kallithea Administrator"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 kallithea/model/db.py:1680
 
msgid "Repository creation disabled"
 
msgstr "Repository erstelllung deaktiviert"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534
 
@@ -1372,57 +1372,57 @@ msgstr ""
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 kallithea/model/db.py:1686
 
msgid "Repository forking enabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403
 
msgid "Register disabled"
 
msgstr "Registrierung deaktiviert"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1180
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1199
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr "Registrierung neuer Benutzer in RhodeCode mit manueller Aktivierung"
 
msgid "Register new user with Kallithea with manual activation"
 
msgstr "Registrierung neuer Benutzer in Kallithea mit manueller Aktivierung"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1183
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1202
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr "Registrierung neuer Benutzer in RhodeCode mit Automatischer Aktivierung"
 
msgid "Register new user with Kallithea with auto activation"
 
msgstr "Registrierung neuer Benutzer in Kallithea mit Automatischer Aktivierung"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 kallithea/model/db.py:2210
 
msgid "Not Reviewed"
 
msgstr "Nicht Begutachtet"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042
 
@@ -1683,49 +1683,49 @@ msgstr "Bitte ein Passwort eingeben"
 
msgid "Enter %(min)i characters or more"
 
msgstr "Bitte mindestens %(min)i Zeichen eingeben"
 

	
 
#: kallithea/model/forms.py:156
 
msgid "Name must not contain only digits"
 
msgstr ""
 

	
 
#: kallithea/model/notification.py:229
 
#, python-format
 
msgid "%(user)s commented on changeset at %(when)s"
 
msgstr ""
 

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

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

	
 
#: kallithea/model/notification.py:232
 
#, python-format
 
msgid "%(user)s registered in RhodeCode at %(when)s"
 
msgid "%(user)s registered in Kallithea at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/notification.py:234
 
#, python-format
 
msgid "%(user)s commented on pull request at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/scm.py:808
 
msgid "latest tip"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:196
 
msgid "New user registration"
 
msgstr ""
 
@@ -1734,49 +1734,49 @@ msgstr ""
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "Sie können diesen User nicht editieren da er für die ganze Applikation von entscheidender bedeutung ist."
 

	
 
#: kallithea/model/user.py:268
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "Sie können diesen User nicht löschen da er für die ganze Applikation von entscheidender bedeutung ist."
 

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

	
 
#: kallithea/model/user.py:302
 
msgid "Password reset link"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:331
 
msgid "Your new password"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:332
 
#, python-format
 
msgid "Your new RhodeCode password:%s"
 
msgid "Your new Kallithea password:%s"
 
msgstr ""
 

	
 
#: kallithea/model/validators.py:82 kallithea/model/validators.py:83
 
msgid "Value cannot be an empty list"
 
msgstr ""
 

	
 
#: kallithea/model/validators.py:120
 
#, python-format
 
msgid "Username \"%(username)s\" already exists"
 
msgstr "Benutezrname \"%(username)s\" existiert bereits"
 

	
 
#: kallithea/model/validators.py:122
 
#, python-format
 
msgid "Username \"%(username)s\" is forbidden"
 
msgstr "Benutzername \"%(username)s\" ist verboten"
 

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

	
 
#: kallithea/model/validators.py:151
 
msgid "The input is not valid"
 
@@ -2300,49 +2300,49 @@ msgstr "Von IP"
 
#: kallithea/templates/admin/admin_log.html:63
 
msgid "No actions yet"
 
msgstr "Es sind bisher keine Aktionen passiert"
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:5
 
msgid "Authentication Settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:14
 
#: kallithea/templates/base/base.html:75
 
msgid "Authentication"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:31
 
msgid "Authentication Plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:34
 
msgid "Enabled Plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:36
 
msgid ""
 
"Comma separated list of plugins. Order of plugins is also order in which "
 
"RhodeCode will try to authenticate user"
 
"Kallithea will try to authenticate user"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:37
 
msgid "Available built-in plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:43
 
#: kallithea/templates/base/root.html:65
 
msgid "enabled"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:43
 
#: kallithea/templates/base/root.html:66
 
msgid "disabled"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:51
 
#: kallithea/templates/admin/defaults/defaults.html:87
 
#: kallithea/templates/admin/my_account/my_account_password.html:33
 
#: kallithea/templates/admin/my_account/my_account_profile.html:68
 
#: kallithea/templates/admin/permissions/permissions_globals.html:108
 
#: kallithea/templates/admin/repo_groups/repo_group_add.html:72
 
#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114
 
#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42
 
@@ -2908,49 +2908,49 @@ msgstr "Rechte Administration"
 
#: kallithea/templates/base/base.html:74
 
msgid "Permissions"
 
msgstr "Rechte"
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:41
 
#: kallithea/templates/admin/settings/settings.html:42
 
msgid "Global"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:42
 
msgid "IP whitelist"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:43
 
msgid "Overview"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:7
 
msgid "Anonymous access"
 
msgstr "Anonymer Zugang"
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:13
 
#, python-format
 
msgid ""
 
"Allow access to RhodeCode without need to log in. Anonymous users use %s "
 
"Allow access to Kallithea without need to log in. Anonymous users use %s "
 
"user permissions"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:26
 
msgid ""
 
"All default permissions on each repository will be reset to chosen "
 
"permission, note that all custom default permission on repositories will be "
 
"lost"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:27
 
#: kallithea/templates/admin/permissions/permissions_globals.html:40
 
#: kallithea/templates/admin/permissions/permissions_globals.html:54
 
msgid "Overwrite existing settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:32
 
#: kallithea/templates/admin/repos/repo_add_base.html:41
 
#: kallithea/templates/admin/repos/repo_edit_settings.html:42
 
#: kallithea/templates/data_table/_dt_elements.html:204
 
#: kallithea/templates/forks/fork.html:51
 
msgid "Repository group"
 
msgstr "Repository Gruppe"
 

	
 
@@ -3277,49 +3277,49 @@ msgstr "Start Revision"
 
msgid ""
 
"Default revision for files page, downloads, full text search index and "
 
"readme generation"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:9
 
#, python-format
 
msgid "%s Creating repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:16
 
msgid "Creating repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:30
 
#, python-format
 
msgid ""
 
"Repository \"%(repo_name)s\" is beeing created, you will be redirected when "
 
"this process is finished.repo_name"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:42
 
msgid ""
 
"We're sorry but error occured during this operation. Please check your "
 
"RhodeCode server logs, or contact administrator."
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:8
 
#, python-format
 
msgid "%s repository settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:52
 
msgid "Extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:55
 
msgid "Caches"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:58
 
msgid "Remote"
 
msgstr "Entfernt"
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:61
 
#: kallithea/templates/summary/statistics.html:11
 
#: kallithea/templates/summary/summary.html:178
 
#: kallithea/templates/summary/summary.html:179
 
msgid "Statistics"
 
@@ -3396,49 +3396,49 @@ msgid "Confirm to delete this repository
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:85
 
msgid "Delete this repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:88
 
#, python-format
 
msgid "this repository has %s fork"
 
msgid_plural "this repository has %s forks"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:89
 
msgid "Detach forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:90
 
msgid "Delete forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:94
 
msgid ""
 
"This repository will be renamed in a special way in order to be unaccesible "
 
"for RhodeCode and VCS systems. If you need to fully delete it from file "
 
"for Kallithea and VCS systems. If you need to fully delete it from file "
 
"system please do it manually"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:4
 
msgid "Invalidate repository cache"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:4
 
msgid "Confirm to invalidate repository cache"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:7
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository "
 
"will be cached again"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:12
 
msgid "List of cached values"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:15
 
msgid "Prefix"
 
msgstr ""
 
@@ -3609,49 +3609,49 @@ msgid "Visual"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:45
 
#: kallithea/templates/admin/settings/settings_vcs.html:19
 
msgid "Hooks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:46
 
msgid "Full text search"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:47
 
msgid "System Info"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:48
 
msgid "License"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:4
 
msgid "Email prefix"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:5
 
msgid "RhodeCode email from"
 
msgid "Kallithea email from"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:6
 
msgid "Error email from"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:7
 
msgid "Error email recipients"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:9
 
msgid "SMTP server"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:10
 
msgid "SMTP username"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:11
 
msgid "SMTP password"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:12
 
msgid "SMTP port"
 
@@ -3661,49 +3661,49 @@ msgstr ""
 
msgid "SMTP use TLS"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:15
 
msgid "SMTP use SSL"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:16
 
msgid "SMTP auth"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:31
 
msgid "Send test email to"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:39
 
msgid "Send"
 
msgstr "Senden"
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:8
 
msgid "Site branding"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:12
 
msgid "Set a custom title for your RhodeCode Service."
 
msgid "Set a custom title for your Kallithea Service."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:18
 
msgid "HTTP authentication realm"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:27
 
msgid "Google Analytics code"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:36
 
msgid "ReCaptcha public key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:40
 
msgid "Public key for reCaptcha system."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:46
 
msgid "ReCaptcha private key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:50
 
msgid ""
 
@@ -3721,142 +3721,142 @@ msgstr "Einstellungen speichern"
 
#: kallithea/templates/admin/settings/settings_hooks.html:1
 
msgid "Built in Mercurial hooks - read only"
 
msgstr ""
 

	
 
#: 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 ""
 

	
 
#: kallithea/templates/admin/settings/settings_hooks.html:19
 
msgid "Custom hooks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_hooks.html:69
 
msgid "Failed to remove hook"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:2
 
msgid "Currently you're using a free license, which is limited to 20 users."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:9
 
#: kallithea/templates/admin/settings/settings_system.html:4
 
msgid "RhodeCode version"
 
msgid "Kallithea version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:10
 
msgid "License token"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:10
 
msgid "No license token"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:13
 
msgid "License issued to"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:14
 
msgid "License issued on"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:15
 
msgid "License users limit"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:15
 
msgid "unlimited"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:16
 
msgid "License expires on"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:33
 
msgid "License key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:37
 
msgid "Paste your RhodeCode license key into that textarea."
 
msgid "Paste your Kallithea license key into that textarea."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:52
 
msgid ""
 
"Please enter following lines (if yet not present) into [app:main] section of"
 
" your .ini file. The token below is autogenerated."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:6
 
msgid "Rescan option"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:11
 
msgid "Destroy old data"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:13
 
msgid ""
 
"In case a repository was deleted from filesystem and it still exists in the "
 
"database check this option to scan obsolete data in database and remove it."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:17
 
msgid "Invalidate cache for all repositories"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:19
 
msgid ""
 
"Each cache data for repositories will be cleaned with this option selected. "
 
"Use this to reload data and clear cache keys."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:23
 
msgid "Install GIT hooks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:25
 
msgid ""
 
"Verify if RhodeCodes GIT hooks are installed for each repository. Current "
 
"Verify if Kallitheas GIT hooks are installed for each repository. Current "
 
"hooks will be updated to latest version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:32
 
msgid "Rescan Repositories"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:7
 
msgid "Index build option"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:12
 
msgid "Build from scratch"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:15
 
msgid ""
 
"This option completely reindex all the files within RhodeCode for proper "
 
"This option completely reindex all the files within Kallithea for proper "
 
"fulltext search capabilities."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:21
 
msgid "Reindex"
 
msgstr "Erneut Indizieren"
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:4
 
msgid "check for updates"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:5
 
msgid "Python version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:6
 
msgid "Platform"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:7
 
msgid "GIT version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:8
 
@@ -3868,143 +3868,143 @@ msgid "Upgrade info endpoint"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:9
 
msgid "Note: please make sure this server can access this url"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:14
 
msgid "Checking for updates..."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:22
 
msgid "Python packages"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:6
 
msgid "Web"
 
msgstr "Web"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:11
 
msgid "Require SSL for vcs operations"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:13
 
msgid ""
 
"Activate to set RhodeCode to require SSL for pushing or pulling. If SSL "
 
"Activate to set Kallithea to require SSL for pushing or pulling. If SSL "
 
"certificate is missing it will return a HTTP Error 406: Not Acceptable."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:24
 
msgid "Show repository size after push"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:28
 
msgid "Log user push commands"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:32
 
msgid "Log user pull commands"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:36
 
msgid "Update repository after push (hg update)"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:42
 
msgid "Mercurial Extensions"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:47
 
msgid "Enable largefiles extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:51
 
msgid "Enable hgsubversion extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:53
 
msgid ""
 
"Requires hgsubversion library to be installed. Allows cloning remote SVN "
 
"repositories and migrates them to Mercurial type."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:64
 
msgid "Repositories location"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:69
 
msgid ""
 
"Click to unlock. You must restart RhodeCode in order to make this setting "
 
"Click to unlock. You must restart Kallithea in order to make this setting "
 
"take effect."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:72
 
msgid ""
 
"Filesystem location where repositories should be stored. After changing this"
 
" value a restart and rescan of the repository folder are required."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:8
 
msgid "General"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:13
 
msgid "Use repository extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:15
 
msgid "Allows storing additional customized fields per repository."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:18
 
msgid "Show RhodeCode version"
 
msgid "Show Kallithea version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:20
 
msgid "Shows or hides a version number of RhodeCode displayed in the footer."
 
msgid "Shows or hides a version number of Kallithea displayed in the footer."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:24
 
msgid "Use Gravatars in RhodeCode"
 
msgid "Use Gravatars in Kallithea"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:30
 
msgid ""
 
"Gravatar url allows you to use other avatar server application.\n"
 
"                                                        Following variables of the URL will be replaced accordingly.\n"
 
"                                                        {scheme}    'http' or 'https' sent from running RhodeCode server,\n"
 
"                                                        {scheme}    'http' or 'https' sent from running Kallithea server,\n"
 
"                                                        {email}     user email,\n"
 
"                                                        {md5email}  md5 hash of the user email (like at gravatar.com),\n"
 
"                                                        {size}      size of the image that is expected from the server application,\n"
 
"                                                        {netloc}    network location/server host of running RhodeCode server"
 
"                                                        {netloc}    network location/server host of running Kallithea server"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:42
 
msgid ""
 
"Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
 
"                                                        {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
 
"                                                        {scheme} 'http' or 'https' sent from running Kallithea server,\n"
 
"                                                        {user}   current user username,\n"
 
"                                                        {netloc} network location/server host of running RhodeCode server,\n"
 
"                                                        {netloc} network location/server host of running Kallithea server,\n"
 
"                                                        {repo}   full repository name,\n"
 
"                                                        {repoid} ID of repository, can be used to contruct clone-by-id"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:54
 
msgid "Dashboard items"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:58
 
msgid ""
 
"Number of items displayed in the main page dashboard before pagination is "
 
"shown."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:64
 
msgid "Admin pages items"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:68
 
msgid ""
 
"Number of items displayed in the admin pages grids before pagination is "
 
"shown."
 
msgstr ""
 

	
 
@@ -4677,49 +4677,49 @@ msgstr ""
 
#: kallithea/templates/changelog/changelog_details.html:9
 
#: kallithea/templates/changelog/changelog_details.html:10
 
#: kallithea/templates/changeset/changeset.html:80
 
#: kallithea/templates/changeset/changeset.html:81
 
#: kallithea/templates/changeset/changeset.html:82
 
#, python-format
 
msgid "Affected %s files"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:6
 
#: kallithea/templates/files/files_add.html:65
 
#: kallithea/templates/files/files_delete.html:53
 
msgid "Commit message"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:7
 
msgid "Age"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:9
 
msgid "Refs"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:86
 
msgid "Add or upload files directly via RhodeCode"
 
msgid "Add or upload files directly via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:89
 
#: kallithea/templates/files/files_ypjax.html:9
 
msgid "Add New File"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:95
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:103
 
msgid "Existing repository?"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset.html:6
 
#, python-format
 
msgid "%s Changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset.html:37
 
msgid "parent rev."
 
msgstr ""
 

	
 
@@ -4823,49 +4823,49 @@ msgstr ""
 
msgid "Status change on changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:32
 
msgid "Comment on changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:63
 
msgid "Submitting..."
 
msgstr ""
 

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

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:67
 
#: kallithea/templates/changeset/changeset_file_comment.html:153
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:69
 
#: kallithea/templates/changeset/changeset_file_comment.html:155
 
msgid ""
 
"Use @username inside this text to send notification to this RhodeCode user"
 
"Use @username inside this text to send notification to this Kallithea user"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:73
 
#: kallithea/templates/changeset/changeset_file_comment.html:166
 
msgid "Preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:80
 
#: kallithea/templates/changeset/changeset_file_comment.html:189
 
msgid "Comment preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:88
 
#: kallithea/templates/changeset/changeset_file_comment.html:196
 
#: kallithea/templates/email_templates/changeset_comment.html:11
 
#: kallithea/templates/email_templates/pull_request_comment.html:16
 
msgid "Comment"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:96
 
msgid "You need to be logged in to comment."
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:96
 
@@ -4988,49 +4988,49 @@ msgstr ""
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "Abonniere den %s RSS Feed"
 

	
 
#: kallithea/templates/data_table/_dt_elements.html:111
 
#: kallithea/templates/data_table/_dt_elements.html:113
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "Abonniere den %s ATOM Feed"
 

	
 
#: kallithea/templates/data_table/_dt_elements.html:141
 
msgid "Creating"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:6
 
#, python-format
 
msgid "%s commented on a %s changeset."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:9
 
msgid "The changeset status was changed to"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgid "This is a notification from Kallithea."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:4
 
#, python-format
 
msgid "Hello %s"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:5
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:6
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:10
 
msgid "Please ignore this email if you did not request a new password ."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/pull_request.html:6
 
#, python-format
 
msgid ""
 
"%s opened a pull request for repository %s and wants you to review changes."
 
msgstr ""
kallithea/i18n/en/LC_MESSAGES/kallithea.po
Show inline comments
 
# English translations for rhodecode.
 
# English translations for Kallithea.
 
# Copyright (C) 2010 ORGANIZATION
 
# This file is distributed under the same license as the rhodecode project.
 
# This file is distributed under the same license as the Kallithea project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Project-Id-Version: Kallithea 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2013-06-01 18:38+0200\n"
 
"PO-Revision-Date: 2011-02-25 19:13+0100\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: en <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: kallithea/controllers/changelog.py:149
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: kallithea/controllers/changeset.py:84
 
msgid "Show white space"
 
msgstr ""
 

	
 
#: kallithea/controllers/changeset.py:91 kallithea/controllers/changeset.py:98
 
msgid "Ignore white space"
 
msgstr ""
 

	
 
#: kallithea/controllers/changeset.py:164
 
@@ -101,66 +101,66 @@ msgstr ""
 
#, python-format
 
msgid "%s committed on %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:89
 
msgid "Click here to add new file"
 
msgstr ""
 

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

	
 
#: kallithea/controllers/files.py:271 kallithea/controllers/files.py:339
 
#, python-format
 
msgid "This repository is has been locked by %s on %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:283
 
msgid "You can only edit files with revision being a valid branch "
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:297
 
#, python-format
 
msgid "Edited file %s via RhodeCode"
 
msgid "Edited file %s via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:313
 
msgid "No changes"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:322 kallithea/controllers/files.py:394
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:327 kallithea/controllers/files.py:405
 
msgid "Error occurred during commit"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:351
 
msgid "Added file via RhodeCode"
 
msgid "Added file via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:368
 
msgid "No content"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:372
 
msgid "No filename"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:397
 
msgid "Location must be relative path and must not contain .. in path"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:431
 
msgid "Downloads disabled"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:442
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:444
 
@@ -191,49 +191,49 @@ msgstr ""
 
#: kallithea/templates/tags/tags.html:10
 
msgid "Tags"
 
msgstr ""
 

	
 
#: kallithea/controllers/forks.py:176
 
#, python-format
 
msgid "Forked repository %s as %s"
 
msgstr ""
 

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

	
 
#: kallithea/controllers/journal.py:110 kallithea/controllers/journal.py:153
 
msgid "public journal"
 
msgstr ""
 

	
 
#: kallithea/controllers/journal.py:114 kallithea/controllers/journal.py:157
 
#: kallithea/templates/journal/journal.html:12
 
msgid "journal"
 
msgstr ""
 

	
 
#: kallithea/controllers/login.py:138
 
msgid "You have successfully registered into RhodeCode"
 
msgid "You have successfully registered into Kallithea"
 
msgstr ""
 

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

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

	
 
#: kallithea/controllers/pullrequests.py:139
 
#: kallithea/templates/changeset/changeset.html:10
 
#: kallithea/templates/email_templates/changeset_comment.html:8
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: kallithea/controllers/pullrequests.py:149
 
msgid "Special"
 
msgstr ""
 

	
 
#: kallithea/controllers/pullrequests.py:150
 
msgid "Peer branches"
 
@@ -948,49 +948,49 @@ msgstr ""
 
msgid "[created] user group"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:751
 
msgid "[updated] user group"
 
msgstr ""
 

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

	
 
#: kallithea/lib/helpers.py:755
 
msgid "[commented] on pull request for"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:757
 
msgid "[closed] pull request for"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:759
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:761
 
msgid "[committed via RhodeCode] into repository"
 
msgid "[committed via Kallithea] into repository"
 
msgstr ""
 

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

	
 
#: kallithea/lib/helpers.py:765
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:767
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:769
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:1088
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:1092
 
@@ -1135,102 +1135,102 @@ msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309
 
msgid "Repositories Group read access"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310
 
msgid "Repositories Group write access"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1191
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311
 
msgid "Repositories Group admin access"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 kallithea/model/db.py:1411
 
msgid "RhodeCode Administrator"
 
msgid "Kallithea Administrator"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 kallithea/model/db.py:1434
 
msgid "Repository creation disabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 kallithea/model/db.py:1435
 
msgid "Repository creation enabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 kallithea/model/db.py:1437
 
msgid "Repository forking disabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 kallithea/model/db.py:1438
 
msgid "Repository forking enabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403
 
msgid "Register disabled"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1199
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404
 
msgid "Register new user with RhodeCode with manual activation"
 
msgid "Register new user with Kallithea with manual activation"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1202
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407
 
msgid "Register new user with RhodeCode with auto activation"
 
msgid "Register new user with Kallithea with auto activation"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1643
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 kallithea/model/db.py:1939
 
msgid "Not Reviewed"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1644
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 kallithea/model/db.py:1940
 
msgid "Approved"
 
msgstr ""
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1645
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 kallithea/model/db.py:1941
 
msgid "Rejected"
 
@@ -1336,49 +1336,49 @@ msgid "Please enter a password"
 
msgstr ""
 

	
 
#: kallithea/model/forms.py:53
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: kallithea/model/notification.py:228
 
#, python-format
 
msgid "%(user)s commented on changeset at %(when)s"
 
msgstr ""
 

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

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

	
 
#: kallithea/model/notification.py:231
 
#, python-format
 
msgid "%(user)s registered in RhodeCode at %(when)s"
 
msgid "%(user)s registered in Kallithea at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/notification.py:233
 
#, python-format
 
msgid "%(user)s commented on pull request at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/scm.py:674
 
msgid "latest tip"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:232
 
msgid "New user registration"
 
msgstr ""
 
@@ -1387,49 +1387,49 @@ msgstr ""
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 

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

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

	
 
#: kallithea/model/user.py:334
 
msgid "Password reset link"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:366
 
msgid "Your new password"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:367
 
#, python-format
 
msgid "Your new RhodeCode password:%s"
 
msgid "Your new Kallithea password:%s"
 
msgstr ""
 

	
 
#: kallithea/model/validators.py:38 kallithea/model/validators.py:39
 
msgid "Value cannot be an empty list"
 
msgstr ""
 

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

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

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

	
 
#: kallithea/model/validators.py:117
 
#, python-format
 
@@ -2583,49 +2583,49 @@ msgid "Remove this repository"
 
msgstr ""
 

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

	
 
#: kallithea/templates/admin/repos/repo_edit.html:310
 
#, python-format
 
msgid "this repository has %s fork"
 
msgid_plural "this repository has %s forks"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:311
 
msgid "Detach forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:312
 
msgid "Delete forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:315
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
 
"unaccesible for Kallithea and VCS systems. If you need to fully delete it"
 
" from file system please do it manually"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:329
 
msgid "Extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:341
 
#, fuzzy, python-format
 
msgid "Confirm to delete this field: %s"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:355
 
msgid "New field key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:363
 
msgid "New field label"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:366
 
msgid "Enter short label"
 
msgstr ""
 

	
 
@@ -2898,53 +2898,53 @@ msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:114
 
#: kallithea/templates/admin/settings/settings.html:195
 
#: kallithea/templates/admin/settings/settings.html:287
 
msgid "Save settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:121
 
msgid "Visualisation settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:129
 
msgid "General"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:134
 
msgid "Use repository extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:136
 
msgid "Allows storing additional customized fields per repository."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:139
 
msgid "Show RhodeCode version"
 
msgid "Show Kallithea version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:141
 
msgid "Shows or hides displayed version of RhodeCode in the footer"
 
msgid "Shows or hides displayed version of Kallithea in the footer"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:146
 
msgid "Dashboard items"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:150
 
msgid ""
 
"Number of items displayed in lightweight dashboard before pagination is "
 
"shown."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:155
 
msgid "Icons"
 
msgstr ""
 

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

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

	
 
@@ -2953,49 +2953,49 @@ msgid "Show public/private icons next to
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:172
 
msgid "Meta-Tagging"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:177
 
msgid "Stylify recognised metatags:"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:204
 
msgid "VCS settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:213
 
msgid "Web"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:218
 
msgid "Require SSL for vcs operations"
 
msgstr ""
 

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

	
 
#: kallithea/templates/admin/settings/settings.html:226
 
msgid "Hooks"
 
msgstr ""
 

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

	
 
#: kallithea/templates/admin/settings/settings.html:235
 
msgid "Show repository size after push"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:239
 
msgid "Log user push commands"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:243
 
msgid "Log user pull commands"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:247
 
@@ -3005,49 +3005,49 @@ msgstr ""
 
#: kallithea/templates/admin/settings/settings.html:252
 
msgid "Mercurial Extensions"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:257
 
msgid "Enable largefiles extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:261
 
msgid "Enable hgsubversion extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:263
 
msgid ""
 
"Requires hgsubversion library installed. Allows cloning from svn remote "
 
"locations"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:274
 
msgid "Repositories location"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:279
 
msgid ""
 
"Click to unlock. You must restart RhodeCode in order to make this setting"
 
"Click to unlock. You must restart Kallithea in order to make this setting"
 
" take effect."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:280
 
#: kallithea/templates/base/base.html:143
 
msgid "Unlock"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:282
 
msgid ""
 
"Location where repositories are stored. After changing this value a "
 
"restart, and rescan is required"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:303
 
msgid "Test Email"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:311
 
msgid "Email to"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:319
 
msgid "Send"
 
@@ -3676,49 +3676,49 @@ msgstr ""
 
#: kallithea/templates/changelog/changelog_details.html:9
 
#: kallithea/templates/changelog/changelog_details.html:10
 
#: kallithea/templates/changeset/changeset.html:95
 
#: kallithea/templates/changeset/changeset.html:96
 
#: kallithea/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "Affected %s files"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:6
 
#: kallithea/templates/files/files_add.html:75
 
#: kallithea/templates/files/files_edit.html:61
 
msgid "Commit message"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:7
 
msgid "Age"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:9
 
msgid "Refs"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:86
 
msgid "Add or upload files directly via RhodeCode"
 
msgid "Add or upload files directly via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:89
 
#: kallithea/templates/files/files_add.html:38
 
#: kallithea/templates/files/files_browser.html:31
 
msgid "Add new file"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:95
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:103
 
msgid "Existing repository?"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset.html:6
 
#, python-format
 
msgid "%s Changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset.html:39
 
msgid "No parents"
 
msgstr ""
 
@@ -3807,49 +3807,49 @@ msgstr ""
 
msgid "Status change on pull request #%s"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:32
 
#, python-format
 
msgid "Comment on pull request #%s"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:55
 
msgid "Submitting..."
 
msgstr ""
 

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

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:59
 
#: kallithea/templates/changeset/changeset_file_comment.html:145
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:61
 
#: kallithea/templates/changeset/changeset_file_comment.html:147
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgid "Use @username inside this text to send notification to this Kallithea user"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:65
 
#: kallithea/templates/changeset/changeset_file_comment.html:152
 
#, fuzzy
 
msgid "Preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:72
 
#: kallithea/templates/changeset/changeset_file_comment.html:170
 
msgid "Comment preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:80
 
#: kallithea/templates/changeset/changeset_file_comment.html:177
 
#: kallithea/templates/email_templates/changeset_comment.html:16
 
#: kallithea/templates/email_templates/pull_request_comment.html:16
 
msgid "Comment"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:81
 
msgid "Cancel"
 
msgstr ""
 

	
 
@@ -3969,49 +3969,49 @@ msgstr ""
 
msgid "Confirm to delete this repository: %s"
 
msgstr ""
 

	
 
#: kallithea/templates/data_table/_dt_elements.html:137
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:4
 
#: kallithea/templates/email_templates/pull_request.html:4
 
#: kallithea/templates/email_templates/pull_request_comment.html:4
 
msgid "URL"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:6
 
#, python-format
 
msgid "%s commented on a %s changeset."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:14
 
msgid "The changeset status was changed to"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgid "This is a notification from Kallithea."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:4
 
#, python-format
 
msgid "Hello %s"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:5
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:6
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:10
 
msgid "Please ignore this email if you did not request a new password ."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/pull_request.html:6
 
#, python-format
 
msgid ""
 
"%s opened a pull request for repository %s and wants you to review "
 
"changes."
kallithea/i18n/fr/LC_MESSAGES/kallithea.po
Show inline comments
 
# Translations template for RhodeCode.
 
# Translations template for Kallithea.
 
# Copyright (C) 2014 RhodeCode GmbH, and others.
 
# This file is distributed under the same license as the RhodeCode project.
 
# This file is distributed under the same license as the Kallithea project.
 
# Translators:
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode\n"
 
"Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
 
"Project-Id-Version: Kallithea\n"
 
"Report-Msgid-Bugs-To: translations@kallithea-scm.org\n"
 
"POT-Creation-Date: 2014-02-13 15:30+0100\n"
 
"PO-Revision-Date: 2014-02-13 14:34+0000\n"
 
"Last-Translator: marcinkuzminski <marcin@python-blog.com>\n"
 
"Language-Team: French (http://www.transifex.com/projects/p/RhodeCode/language/fr/)\n"
 
"Language-Team: French (http://www.transifex.com/projects/p/Kallithea/language/fr/)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=UTF-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 
"Language: fr\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 

	
 
#: kallithea/controllers/changelog.py:88 kallithea/controllers/compare.py:88
 
#: kallithea/controllers/pullrequests.py:263
 
msgid "There are no changesets yet"
 
msgstr "Il n’y a aucun changement pour le moment"
 

	
 
#: kallithea/controllers/changelog.py:184
 
msgid "All Branches"
 
msgstr "Toutes les branches"
 

	
 
#: kallithea/controllers/changelog.py:187
 
msgid "(closed)"
 
msgstr ""
 

	
 
#: kallithea/controllers/changeset.py:85
 
msgid "Show white space"
 
msgstr "Afficher les espaces et tabulations"
 

	
 
@@ -117,82 +117,82 @@ msgstr "Cet ensemble de changements était trop important et a été découpé…"
 
msgid "%s committed on %s"
 
msgstr "%s a commité, le %s"
 

	
 
#: kallithea/controllers/files.py:90
 
msgid "Click here to add new file"
 
msgstr "Ajouter un nouveau fichier"
 

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

	
 
#: kallithea/controllers/files.py:299 kallithea/controllers/files.py:359
 
#: kallithea/controllers/files.py:426
 
#, python-format
 
msgid "This repository is has been locked by %s on %s"
 
msgstr "Ce dépôt a été verrouillé par %s sur %s."
 

	
 
#: kallithea/controllers/files.py:311
 
msgid "You can only delete files with revision being a valid branch "
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:322
 
#, python-format
 
msgid "Deleted file %s via RhodeCode"
 
msgid "Deleted file %s via Kallithea"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:344
 
#, python-format
 
msgid "Successfully deleted file %s"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:348 kallithea/controllers/files.py:414
 
#: kallithea/controllers/files.py:496
 
msgid "Error occurred during commit"
 
msgstr "Une erreur est survenue durant le commit"
 

	
 
#: kallithea/controllers/files.py:371
 
msgid "You can only edit files with revision being a valid branch "
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:385
 
#, python-format
 
msgid "Edited file %s via RhodeCode"
 
msgstr "%s édité via RhodeCode"
 
msgid "Edited file %s via Kallithea"
 
msgstr "%s édité via Kallithea"
 

	
 
#: kallithea/controllers/files.py:401
 
msgid "No changes"
 
msgstr "Aucun changement"
 

	
 
#: kallithea/controllers/files.py:410 kallithea/controllers/files.py:485
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "Commit réalisé avec succès sur %s"
 

	
 
#: kallithea/controllers/files.py:438
 
msgid "Added file via RhodeCode"
 
msgstr "%s ajouté par RhodeCode"
 
msgid "Added file via Kallithea"
 
msgstr "%s ajouté par Kallithea"
 

	
 
#: kallithea/controllers/files.py:459
 
msgid "No content"
 
msgstr "Aucun contenu"
 

	
 
#: kallithea/controllers/files.py:463
 
msgid "No filename"
 
msgstr "Aucun nom de fichier"
 

	
 
#: kallithea/controllers/files.py:488
 
msgid "Location must be relative path and must not contain .. in path"
 
msgstr ""
 

	
 
#: kallithea/controllers/files.py:522
 
msgid "Downloads disabled"
 
msgstr "Les téléchargements sont désactivés"
 

	
 
#: kallithea/controllers/files.py:533
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "Révision %s inconnue."
 

	
 
#: kallithea/controllers/files.py:535
 
msgid "Empty repository"
 
@@ -254,50 +254,50 @@ msgid "Branch"
 
msgstr ""
 

	
 
#: kallithea/controllers/home.py:133
 
msgid "Tag"
 
msgstr ""
 

	
 
#: kallithea/controllers/home.py:139
 
msgid "Bookmark"
 
msgstr ""
 

	
 
#: kallithea/controllers/journal.py:112 kallithea/controllers/journal.py:155
 
msgid "public journal"
 
msgstr "Journal public"
 

	
 
#: kallithea/controllers/journal.py:116 kallithea/controllers/journal.py:159
 
#: kallithea/templates/journal/journal.html:15
 
msgid "journal"
 
msgstr "Journal"
 

	
 
#: kallithea/controllers/login.py:185 kallithea/controllers/login.py:230
 
msgid "bad captcha"
 
msgstr ""
 

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

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

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

	
 
#: kallithea/controllers/pullrequests.py:138
 
#: kallithea/templates/changeset/changeset.html:13
 
#: kallithea/templates/email_templates/changeset_comment.html:15
 
msgid "Changeset"
 
msgstr "Changements"
 

	
 
#: kallithea/controllers/pullrequests.py:155
 
msgid "Special"
 
msgstr ""
 

	
 
#: kallithea/controllers/pullrequests.py:156
 
msgid "Peer branches"
 
msgstr ""
 

	
 
@@ -1081,50 +1081,50 @@ msgstr "[a mis à jour] l’utilisateur"
 
msgid "[created] user group"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:769
 
msgid "[updated] user group"
 
msgstr ""
 

	
 
#: kallithea/lib/helpers.py:771
 
msgid "[commented] on revision in repository"
 
msgstr "[a commenté] une révision du dépôt"
 

	
 
#: kallithea/lib/helpers.py:773
 
msgid "[commented] on pull request for"
 
msgstr "[a commenté] la requête de pull pour"
 

	
 
#: kallithea/lib/helpers.py:775
 
msgid "[closed] pull request for"
 
msgstr "[a fermé] la requête de pull de"
 

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

	
 
#: kallithea/lib/helpers.py:779
 
msgid "[committed via RhodeCode] into repository"
 
msgstr "[a commité via RhodeCode] dans le dépôt"
 
msgid "[committed via Kallithea] into repository"
 
msgstr "[a commité via Kallithea] dans le dépôt"
 

	
 
#: kallithea/lib/helpers.py:781
 
msgid "[pulled from remote] into repository"
 
msgstr "[a pullé depuis un site distant] dans le dépôt"
 

	
 
#: kallithea/lib/helpers.py:783
 
msgid "[pulled] from"
 
msgstr "[a pullé] depuis"
 

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

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

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

	
 
#: kallithea/lib/helpers.py:1106
 
msgid "No Files"
 
@@ -1298,50 +1298,50 @@ msgstr "Accès en lecture au groupe de dépôts"
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310
 
msgid "Repositories Group write access"
 
msgstr "Accès en écriture au groupe de dépôts"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1172
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1191
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311
 
msgid "Repositories Group admin access"
 
msgstr "Accès administrateur au groupe de dépôts"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1657
 
msgid "RhodeCode Administrator"
 
msgstr "Administrateur RhodeCode"
 
msgid "Kallithea Administrator"
 
msgstr "Administrateur Kallithea"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 kallithea/model/db.py:1680
 
msgid "Repository creation disabled"
 
msgstr "Création de dépôt désactivée"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534
 
@@ -1372,57 +1372,57 @@ msgstr "Fork de dépôt désactivé"
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 kallithea/model/db.py:1686
 
msgid "Repository forking enabled"
 
msgstr "Fork de dépôt activé"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403
 
msgid "Register disabled"
 
msgstr "Enregistrement désactivé"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1180
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1199
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr "Enregistrer un nouvel utilisateur Rhodecode manuellement activé"
 
msgid "Register new user with Kallithea with manual activation"
 
msgstr "Enregistrer un nouvel utilisateur Kallithea manuellement activé"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1183
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1202
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr "Enregistrer un nouvel utilisateur Rhodecode auto-activé"
 
msgid "Register new user with Kallithea with auto activation"
 
msgstr "Enregistrer un nouvel utilisateur Kallithea auto-activé"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041
 
#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062
 
#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101
 
#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154
 
#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 kallithea/model/db.py:2210
 
msgid "Not Reviewed"
 
msgstr "Pas encore relue"
 

	
 
#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625
 
#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652
 
#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764
 
#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839
 
#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935
 
#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981
 
#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041
 
#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042
 
@@ -1683,49 +1683,49 @@ msgstr "Veuillez entrer un mot de passe"
 
msgid "Enter %(min)i characters or more"
 
msgstr "Entrez au moins %(min)i caractères"
 

	
 
#: kallithea/model/forms.py:156
 
msgid "Name must not contain only digits"
 
msgstr ""
 

	
 
#: kallithea/model/notification.py:229
 
#, python-format
 
msgid "%(user)s commented on changeset at %(when)s"
 
msgstr ""
 

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

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

	
 
#: kallithea/model/notification.py:232
 
#, python-format
 
msgid "%(user)s registered in RhodeCode at %(when)s"
 
msgid "%(user)s registered in Kallithea at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/notification.py:234
 
#, python-format
 
msgid "%(user)s commented on pull request at %(when)s"
 
msgstr ""
 

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

	
 
#: kallithea/model/scm.py:808
 
msgid "latest tip"
 
msgstr "Dernier sommet"
 

	
 
#: kallithea/model/user.py:196
 
msgid "New user registration"
 
msgstr ""
 
@@ -1734,49 +1734,49 @@ msgstr ""
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon fonctionnement de l’application."
 

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

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

	
 
#: kallithea/model/user.py:302
 
msgid "Password reset link"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:331
 
msgid "Your new password"
 
msgstr ""
 

	
 
#: kallithea/model/user.py:332
 
#, python-format
 
msgid "Your new RhodeCode password:%s"
 
msgid "Your new Kallithea password:%s"
 
msgstr ""
 

	
 
#: kallithea/model/validators.py:82 kallithea/model/validators.py:83
 
msgid "Value cannot be an empty list"
 
msgstr "Cette valeur ne peut être une liste vide."
 

	
 
#: kallithea/model/validators.py:120
 
#, python-format
 
msgid "Username \"%(username)s\" already exists"
 
msgstr "Le nom d’utilisateur « %(username)s » existe déjà."
 

	
 
#: kallithea/model/validators.py:122
 
#, python-format
 
msgid "Username \"%(username)s\" is forbidden"
 
msgstr "Le nom d’utilisateur « %(username)s » n’est pas autorisé"
 

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

	
 
#: kallithea/model/validators.py:151
 
msgid "The input is not valid"
 
@@ -2300,49 +2300,49 @@ msgstr "Depuis l’adresse IP"
 
#: kallithea/templates/admin/admin_log.html:63
 
msgid "No actions yet"
 
msgstr "Aucune action n’a été enregistrée pour le moment."
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:5
 
msgid "Authentication Settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:14
 
#: kallithea/templates/base/base.html:75
 
msgid "Authentication"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:31
 
msgid "Authentication Plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:34
 
msgid "Enabled Plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:36
 
msgid ""
 
"Comma separated list of plugins. Order of plugins is also order in which "
 
"RhodeCode will try to authenticate user"
 
"Kallithea will try to authenticate user"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:37
 
msgid "Available built-in plugins"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:43
 
#: kallithea/templates/base/root.html:65
 
msgid "enabled"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:43
 
#: kallithea/templates/base/root.html:66
 
msgid "disabled"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/auth/auth_settings.html:51
 
#: kallithea/templates/admin/defaults/defaults.html:87
 
#: kallithea/templates/admin/my_account/my_account_password.html:33
 
#: kallithea/templates/admin/my_account/my_account_profile.html:68
 
#: kallithea/templates/admin/permissions/permissions_globals.html:108
 
#: kallithea/templates/admin/repo_groups/repo_group_add.html:72
 
#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114
 
#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42
 
@@ -2908,49 +2908,49 @@ msgstr "Gestion des permissions"
 
#: kallithea/templates/base/base.html:74
 
msgid "Permissions"
 
msgstr "Permissions"
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:41
 
#: kallithea/templates/admin/settings/settings.html:42
 
msgid "Global"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:42
 
msgid "IP whitelist"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions.html:43
 
msgid "Overview"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:7
 
msgid "Anonymous access"
 
msgstr "Accès anonyme"
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:13
 
#, python-format
 
msgid ""
 
"Allow access to RhodeCode without need to log in. Anonymous users use %s "
 
"Allow access to Kallithea without need to log in. Anonymous users use %s "
 
"user permissions"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:26
 
msgid ""
 
"All default permissions on each repository will be reset to chosen "
 
"permission, note that all custom default permission on repositories will be "
 
"lost"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:27
 
#: kallithea/templates/admin/permissions/permissions_globals.html:40
 
#: kallithea/templates/admin/permissions/permissions_globals.html:54
 
msgid "Overwrite existing settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/permissions/permissions_globals.html:32
 
#: kallithea/templates/admin/repos/repo_add_base.html:41
 
#: kallithea/templates/admin/repos/repo_edit_settings.html:42
 
#: kallithea/templates/data_table/_dt_elements.html:204
 
#: kallithea/templates/forks/fork.html:51
 
msgid "Repository group"
 
msgstr "Groupe de dépôt"
 

	
 
@@ -3277,49 +3277,49 @@ msgstr "Révision d’arrivée"
 
msgid ""
 
"Default revision for files page, downloads, full text search index and "
 
"readme generation"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:9
 
#, python-format
 
msgid "%s Creating repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:16
 
msgid "Creating repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:30
 
#, python-format
 
msgid ""
 
"Repository \"%(repo_name)s\" is beeing created, you will be redirected when "
 
"this process is finished.repo_name"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_creating.html:42
 
msgid ""
 
"We're sorry but error occured during this operation. Please check your "
 
"RhodeCode server logs, or contact administrator."
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:8
 
#, python-format
 
msgid "%s repository settings"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:52
 
msgid "Extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:55
 
msgid "Caches"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:58
 
msgid "Remote"
 
msgstr "Dépôt distant"
 

	
 
#: kallithea/templates/admin/repos/repo_edit.html:61
 
#: kallithea/templates/summary/statistics.html:11
 
#: kallithea/templates/summary/summary.html:178
 
#: kallithea/templates/summary/summary.html:179
 
msgid "Statistics"
 
@@ -3396,49 +3396,49 @@ msgid "Confirm to delete this repository
 
msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:85
 
msgid "Delete this repository"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:88
 
#, python-format
 
msgid "this repository has %s fork"
 
msgid_plural "this repository has %s forks"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:89
 
msgid "Detach forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:90
 
msgid "Delete forks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_advanced.html:94
 
msgid ""
 
"This repository will be renamed in a special way in order to be unaccesible "
 
"for RhodeCode and VCS systems. If you need to fully delete it from file "
 
"for Kallithea and VCS systems. If you need to fully delete it from file "
 
"system please do it manually"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:4
 
msgid "Invalidate repository cache"
 
msgstr "Invalider le cache du dépôt"
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:4
 
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
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository "
 
"will be cached again"
 
msgstr "Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce dépôt, il sera à nouveau mis en cache."
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:12
 
msgid "List of cached values"
 
msgstr "Liste des valeurs en cache"
 

	
 
#: kallithea/templates/admin/repos/repo_edit_caches.html:15
 
msgid "Prefix"
 
msgstr ""
 
@@ -3609,49 +3609,49 @@ msgid "Visual"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:45
 
#: kallithea/templates/admin/settings/settings_vcs.html:19
 
msgid "Hooks"
 
msgstr "Hooks"
 

	
 
#: kallithea/templates/admin/settings/settings.html:46
 
msgid "Full text search"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:47
 
msgid "System Info"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings.html:48
 
msgid "License"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:4
 
msgid "Email prefix"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:5
 
msgid "RhodeCode email from"
 
msgid "Kallithea email from"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:6
 
msgid "Error email from"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:7
 
msgid "Error email recipients"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:9
 
msgid "SMTP server"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:10
 
msgid "SMTP username"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:11
 
msgid "SMTP password"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:12
 
msgid "SMTP port"
 
@@ -3661,49 +3661,49 @@ msgstr ""
 
msgid "SMTP use TLS"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:15
 
msgid "SMTP use SSL"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:16
 
msgid "SMTP auth"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:31
 
msgid "Send test email to"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_email.html:39
 
msgid "Send"
 
msgstr "Envoyer"
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:8
 
msgid "Site branding"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:12
 
msgid "Set a custom title for your RhodeCode Service."
 
msgid "Set a custom title for your Kallithea Service."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:18
 
msgid "HTTP authentication realm"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:27
 
msgid "Google Analytics code"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:36
 
msgid "ReCaptcha public key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:40
 
msgid "Public key for reCaptcha system."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:46
 
msgid "ReCaptcha private key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_global.html:50
 
msgid ""
 
@@ -3721,142 +3721,142 @@ msgstr "Enregister les options"
 
#: kallithea/templates/admin/settings/settings_hooks.html:1
 
msgid "Built in Mercurial hooks - read only"
 
msgstr ""
 

	
 
#: 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 ""
 

	
 
#: kallithea/templates/admin/settings/settings_hooks.html:19
 
msgid "Custom hooks"
 
msgstr "Hooks personnalisés"
 

	
 
#: kallithea/templates/admin/settings/settings_hooks.html:69
 
msgid "Failed to remove hook"
 
msgstr "Erreur lors de la suppression du hook."
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:2
 
msgid "Currently you're using a free license, which is limited to 20 users."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:9
 
#: kallithea/templates/admin/settings/settings_system.html:4
 
msgid "RhodeCode version"
 
msgid "Kallithea version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:10
 
msgid "License token"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:10
 
msgid "No license token"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:13
 
msgid "License issued to"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:14
 
msgid "License issued on"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:15
 
msgid "License users limit"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:15
 
msgid "unlimited"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:16
 
msgid "License expires on"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:33
 
msgid "License key"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:37
 
msgid "Paste your RhodeCode license key into that textarea."
 
msgid "Paste your Kallithea license key into that textarea."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_license.html:52
 
msgid ""
 
"Please enter following lines (if yet not present) into [app:main] section of"
 
" your .ini file. The token below is autogenerated."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:6
 
msgid "Rescan option"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:11
 
msgid "Destroy old data"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:13
 
msgid ""
 
"In case a repository was deleted from filesystem and it still exists in the "
 
"database check this option to scan obsolete data in database and remove it."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:17
 
msgid "Invalidate cache for all repositories"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:19
 
msgid ""
 
"Each cache data for repositories will be cleaned with this option selected. "
 
"Use this to reload data and clear cache keys."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:23
 
msgid "Install GIT hooks"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:25
 
msgid ""
 
"Verify if RhodeCodes GIT hooks are installed for each repository. Current "
 
"Verify if Kallitheas GIT hooks are installed for each repository. Current "
 
"hooks will be updated to latest version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_mapping.html:32
 
msgid "Rescan Repositories"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:7
 
msgid "Index build option"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:12
 
msgid "Build from scratch"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:15
 
msgid ""
 
"This option completely reindex all the files within RhodeCode for proper "
 
"This option completely reindex all the files within Kallithea for proper "
 
"fulltext search capabilities."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_search.html:21
 
msgid "Reindex"
 
msgstr "Mettre à jour l’index"
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:4
 
msgid "check for updates"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:5
 
msgid "Python version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:6
 
msgid "Platform"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:7
 
msgid "GIT version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:8
 
@@ -3868,143 +3868,143 @@ msgid "Upgrade info endpoint"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:9
 
msgid "Note: please make sure this server can access this url"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:14
 
msgid "Checking for updates..."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_system.html:22
 
msgid "Python packages"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:6
 
msgid "Web"
 
msgstr "Web"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:11
 
msgid "Require SSL for vcs operations"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:13
 
msgid ""
 
"Activate to set RhodeCode to require SSL for pushing or pulling. If SSL "
 
"Activate to set Kallithea to require SSL for pushing or pulling. If SSL "
 
"certificate is missing it will return a HTTP Error 406: Not Acceptable."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:24
 
msgid "Show repository size after push"
 
msgstr "Afficher la taille du dépôt après un push"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:28
 
msgid "Log user push commands"
 
msgstr "Journaliser les commandes de push"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:32
 
msgid "Log user pull commands"
 
msgstr "Journaliser les commandes de pull"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:36
 
msgid "Update repository after push (hg update)"
 
msgstr "Mettre à jour les dépôts après un push (hg update)"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:42
 
msgid "Mercurial Extensions"
 
msgstr "Extensions Mercurial"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:47
 
msgid "Enable largefiles extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:51
 
msgid "Enable hgsubversion extension"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:53
 
msgid ""
 
"Requires hgsubversion library to be installed. Allows cloning remote SVN "
 
"repositories and migrates them to Mercurial type."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:64
 
msgid "Repositories location"
 
msgstr "Emplacement des dépôts"
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:69
 
msgid ""
 
"Click to unlock. You must restart RhodeCode in order to make this setting "
 
"Click to unlock. You must restart Kallithea in order to make this setting "
 
"take effect."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_vcs.html:72
 
msgid ""
 
"Filesystem location where repositories should be stored. After changing this"
 
" value a restart and rescan of the repository folder are required."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:8
 
msgid "General"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:13
 
msgid "Use repository extra fields"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:15
 
msgid "Allows storing additional customized fields per repository."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:18
 
msgid "Show RhodeCode version"
 
msgid "Show Kallithea version"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:20
 
msgid "Shows or hides a version number of RhodeCode displayed in the footer."
 
msgid "Shows or hides a version number of Kallithea displayed in the footer."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:24
 
msgid "Use Gravatars in RhodeCode"
 
msgid "Use Gravatars in Kallithea"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:30
 
msgid ""
 
"Gravatar url allows you to use other avatar server application.\n"
 
"                                                        Following variables of the URL will be replaced accordingly.\n"
 
"                                                        {scheme}    'http' or 'https' sent from running RhodeCode server,\n"
 
"                                                        {scheme}    'http' or 'https' sent from running Kallithea server,\n"
 
"                                                        {email}     user email,\n"
 
"                                                        {md5email}  md5 hash of the user email (like at gravatar.com),\n"
 
"                                                        {size}      size of the image that is expected from the server application,\n"
 
"                                                        {netloc}    network location/server host of running RhodeCode server"
 
"                                                        {netloc}    network location/server host of running Kallithea server"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:42
 
msgid ""
 
"Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
 
"                                                        {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
 
"                                                        {scheme} 'http' or 'https' sent from running Kallithea server,\n"
 
"                                                        {user}   current user username,\n"
 
"                                                        {netloc} network location/server host of running RhodeCode server,\n"
 
"                                                        {netloc} network location/server host of running Kallithea server,\n"
 
"                                                        {repo}   full repository name,\n"
 
"                                                        {repoid} ID of repository, can be used to contruct clone-by-id"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:54
 
msgid "Dashboard items"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:58
 
msgid ""
 
"Number of items displayed in the main page dashboard before pagination is "
 
"shown."
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:64
 
msgid "Admin pages items"
 
msgstr ""
 

	
 
#: kallithea/templates/admin/settings/settings_visual.html:68
 
msgid ""
 
"Number of items displayed in the admin pages grids before pagination is "
 
"shown."
 
msgstr ""
 

	
 
@@ -4677,50 +4677,50 @@ msgstr ""
 
#: kallithea/templates/changelog/changelog_details.html:9
 
#: kallithea/templates/changelog/changelog_details.html:10
 
#: kallithea/templates/changeset/changeset.html:80
 
#: kallithea/templates/changeset/changeset.html:81
 
#: kallithea/templates/changeset/changeset.html:82
 
#, python-format
 
msgid "Affected %s files"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:6
 
#: kallithea/templates/files/files_add.html:65
 
#: kallithea/templates/files/files_delete.html:53
 
msgid "Commit message"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:7
 
msgid "Age"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:9
 
msgid "Refs"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:86
 
msgid "Add or upload files directly via RhodeCode"
 
msgstr "Ajouter ou téléverser des fichiers directement via RhodeCode…"
 
msgid "Add or upload files directly via Kallithea"
 
msgstr "Ajouter ou téléverser des fichiers directement via Kallithea…"
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:89
 
#: kallithea/templates/files/files_ypjax.html:9
 
msgid "Add New File"
 
msgstr ""
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:95
 
msgid "Push new repo"
 
msgstr "Pusher le nouveau dépôt"
 

	
 
#: kallithea/templates/changelog/changelog_summary_data.html:103
 
msgid "Existing repository?"
 
msgstr "Le dépôt existe déjà ?"
 

	
 
#: kallithea/templates/changeset/changeset.html:6
 
#, python-format
 
msgid "%s Changeset"
 
msgstr "Changeset de %s"
 

	
 
#: kallithea/templates/changeset/changeset.html:37
 
msgid "parent rev."
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset.html:43
 
@@ -4823,50 +4823,50 @@ msgstr ""
 
msgid "Status change on changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:32
 
msgid "Comment on changeset"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:63
 
msgid "Submitting..."
 
msgstr "Envoi…"
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:66
 
msgid "Commenting on line {1}."
 
msgstr "Commentaire sur la ligne {1}."
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:67
 
#: kallithea/templates/changeset/changeset_file_comment.html:153
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr "Les commentaires sont analysés avec la syntaxe %s, avec le support de la commande %s."
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:69
 
#: kallithea/templates/changeset/changeset_file_comment.html:155
 
msgid ""
 
"Use @username inside this text to send notification to this RhodeCode user"
 
msgstr "Utilisez @nomutilisateur dans ce texte pour envoyer une notification à l’utilisateur RhodeCode en question."
 
"Use @username inside this text to send notification to this Kallithea user"
 
msgstr "Utilisez @nomutilisateur dans ce texte pour envoyer une notification à l’utilisateur Kallithea en question."
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:73
 
#: kallithea/templates/changeset/changeset_file_comment.html:166
 
msgid "Preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:80
 
#: kallithea/templates/changeset/changeset_file_comment.html:189
 
msgid "Comment preview"
 
msgstr ""
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:88
 
#: kallithea/templates/changeset/changeset_file_comment.html:196
 
#: kallithea/templates/email_templates/changeset_comment.html:11
 
#: kallithea/templates/email_templates/pull_request_comment.html:16
 
msgid "Comment"
 
msgstr "Commentaire"
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:96
 
msgid "You need to be logged in to comment."
 
msgstr "Vous devez être connecté pour poster des commentaires."
 

	
 
#: kallithea/templates/changeset/changeset_file_comment.html:96
 
msgid "Login now"
 
@@ -4988,49 +4988,49 @@ msgstr "Dépôt vide"
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "S’abonner au flux RSS de %s"
 

	
 
#: kallithea/templates/data_table/_dt_elements.html:111
 
#: kallithea/templates/data_table/_dt_elements.html:113
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "S’abonner au flux ATOM de %s"
 

	
 
#: kallithea/templates/data_table/_dt_elements.html:141
 
msgid "Creating"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:6
 
#, python-format
 
msgid "%s commented on a %s changeset."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/changeset_comment.html:9
 
msgid "The changeset status was changed to"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgid "This is a notification from Kallithea."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:4
 
#, python-format
 
msgid "Hello %s"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:5
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:6
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/password_reset.html:10
 
msgid "Please ignore this email if you did not request a new password ."
 
msgstr ""
 

	
 
#: kallithea/templates/email_templates/pull_request.html:6
 
#, python-format
 
msgid ""
 
"%s opened a pull request for repository %s and wants you to review changes."
 
msgstr ""
kallithea/i18n/how_to
Show inline comments
 
##########################
 
# to create new language #
 
##########################
 

	
 
Translations are available on transifex under::
 

	
 
    https://www.transifex.com/projects/p/RhodeCode/
 
    https://www.transifex.com/projects/p/Kallithea/
 

	
 
Preferred method is to register on transifex and request new language translation.
 

	
 
manual creation of new language
 
+++++++++++++++++++++++++++++++
 
 
 
Dowload sources of RhodeCode. Run::
 
Dowload sources of Kallithea. Run::
 

	
 
    python setup.py develop
 

	
 
To prepare the enviroment
 

	
 

	
 
Make sure all translation strings are extracted by running::
 

	
 
    python setup.py extract_messages
 

	
 
Create new language by executing following command::
 
    python setup.py init_catalog -l <new_language_code>
 

	
 
This creates a new language under directory kallithea/i18n/<new_language_code>
 
Be sure to update transifex mapping under .tx/config for new language
 

	
 
Edit the new PO file located in LC_MESSAGES directory with poedit or your
 
favorite PO files editor. Do translations and at the end verify the translation
 
file for any errors. This can be done by executing::
 

	
 
    msgfmt -f -c kallithea/i18n/<new_language_code>/LC_MESSAGES/<updated_file.po>
 

	
 
finally compile the translations::
 

	
 
@@ -41,27 +41,27 @@ finally compile the translations::
 
##########################
 
# to update translations #
 
##########################
 

	
 
Fetch latest version of strings for translation by running::
 

	
 
    python setup.py extract_messages
 

	
 
Update PO file by doing::
 

	
 
    python setup.py update_catalog -l <new_language_code><- to update the translations
 

	
 
Edit the new updated po file. Repeat all steps after `init_catalog` step from
 
new translation instructions
 

	
 

	
 
########################
 
# testing translations #
 
########################
 

	
 
Edit test.ini file and set lang attribute to::
 

	
 
    lang=<new_language_code>
 

	
 
Run RhodeCode tests by executing::
 
Run Kallithea tests by executing::
 

	
 
    nosetests

Changeset was too big and was cut off... Show full diff anyway

0 comments (0 inline, 0 general)