Changeset - a04d6926d694
[Not reviewed]
Merge default
0 9 0
Thomas De Schampheleire - 6 years ago 2020-06-17 21:52:16
thomas.de_schampheleire@nokia.com
merge stable
9 files changed with 39 insertions and 19 deletions:
0 comments (0 inline, 0 general)
development.ini
Show inline comments
 
@@ -359,12 +359,13 @@ logview.pylons.util = #eee
 
##      DB CONFIG      ##
 
#########################
 

	
 
sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
 
#sqlalchemy.url = postgresql://user:pass@localhost/kallithea
 
#sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
 
## Note: the mysql:// prefix should also be used for MariaDB
 

	
 
sqlalchemy.pool_recycle = 3600
 

	
 
################################
 
##   ALEMBIC CONFIGURATION    ##
 
################################
docs/overview.rst
Show inline comments
 
@@ -19,14 +19,14 @@ installing Kallithea.
 

	
 
2. **Install Kallithea software.**
 
    This makes the ``kallithea-cli`` command line tool available.
 

	
 
3. **Create low level configuration file.**
 
    Use ``kallithea-cli config-create`` to create a ``.ini`` file with database
 
    connection info, mail server information, some web server configuration,
 
    etc.
 
    connection info, mail server information, configuration for the specified
 
    web server, etc.
 

	
 
4. **Populate the database.**
 
    Use ``kallithea-cli db-create`` with the ``.ini`` file to create the
 
    database schema and insert the most basic information: the location of the
 
    repository store and an initial local admin user.
 

	
 
@@ -138,15 +138,17 @@ installed.
 
  directory with Python files and everything else that is needed.
 

	
 
  (``pip install kallithea`` from a source tree will do pretty much the same
 
  but build the Kallithea package itself locally instead of downloading it.)
 

	
 
.. note::
 
   Kallithea includes front-end code that needs to be processed first.
 
   The tool npm_ is used to download external dependencies and orchestrate the
 
   processing. The ``npm`` binary must thus be available.
 
   Kallithea includes front-end code that needs to be processed to prepare
 
   static files that can be served at run time and used on the client side. The
 
   tool npm_ is used to download external dependencies and orchestrate the
 
   processing. The ``npm`` binary must thus be available at install time but is
 
   not used at run time.
 

	
 

	
 
Web server
 
----------
 

	
 
Kallithea is (primarily) a WSGI_ application that must be run from a web
 
@@ -163,25 +165,30 @@ There are several web server options:
 
- Kallithea uses the Gearbox_ tool as command line interface. Gearbox provides
 
  ``gearbox serve`` as a convenient way to launch a Python WSGI / web server
 
  from the command line. That is perfect for development and evaluation.
 
  Actual use in production might have different requirements and need extra
 
  work to make it manageable as a scalable system service.
 

	
 
  Gearbox comes with its own built-in web server but Kallithea defaults to use
 
  Waitress_. Gunicorn_ is also an option. These web servers have different
 
  limited feature sets.
 
  Gearbox comes with its own built-in web server for development but Kallithea
 
  defaults to using Waitress_. Gunicorn_ and Gevent_ are also options. These
 
  web servers have different limited feature sets.
 

	
 
  The web server used by ``gearbox`` is configured in the ``.ini`` file passed
 
  to it. The entry point for the WSGI application is configured
 
  in ``setup.py`` as ``kallithea.config.application:make_app``.
 
  The web server used by ``gearbox serve`` is configured in the ``.ini`` file.
 
  Create it with ``config-create`` using for example ``http_server=waitress``
 
  to get a configuration starting point for your choice of web server.
 

	
 
  (Gearbox will do like ``paste`` and use the WSGI application entry point
 
  ``kallithea.config.middleware:make_app`` as specified in ``setup.py``.)
 

	
 
- `Apache httpd`_ can serve WSGI applications directly using mod_wsgi_ and a
 
  simple Python file with the necessary configuration. This is a good option if
 
  Apache is an option.
 

	
 
- uWSGI_ is also a full web server with built-in WSGI module.
 
- uWSGI_ is also a full web server with built-in WSGI module. Use
 
  ``config-create`` with ``http_server=uwsgi`` to get a ``.ini`` file with
 
  uWSGI configuration.
 

	
 
- IIS_ can also server WSGI applications directly using isapi-wsgi_.
 

	
 
- A `reverse HTTP proxy <https://en.wikipedia.org/wiki/Reverse_proxy>`_
 
  can be put in front of another web server which has WSGI support.
 
  Such a layered setup can be complex but might in some cases be the right
 
@@ -194,15 +201,24 @@ There are several web server options:
 
The best option depends on what you are familiar with and the requirements for
 
performance and stability. Also, keep in mind that Kallithea mainly is serving
 
dynamically generated pages from a relatively slow Python process. Kallithea is
 
also often used inside organizations with a limited amount of users and thus no
 
continuous hammering from the internet.
 

	
 
.. note::
 
   Kallithea, the libraries it uses, and Python itself do in several places use
 
   simple caching in memory. Caches and memory are not always released in a way
 
   that is suitable for long-running processes. They might appear to be leaking
 
   memory. The worker processes should thus regularly be restarted - for
 
   example after 1000 requests and/or one hour. This can usually be done by the
 
   web server or the tool used for running it as a system service.
 

	
 

	
 
.. _Python: http://www.python.org/
 
.. _Gunicorn: http://gunicorn.org/
 
.. _Gevent: http://www.gevent.org/
 
.. _Waitress: http://waitress.readthedocs.org/en/latest/
 
.. _Gearbox: http://turbogears.readthedocs.io/en/latest/turbogears/gearbox.html
 
.. _PyPI: https://pypi.python.org/pypi
 
.. _Apache httpd: http://httpd.apache.org/
 
.. _mod_wsgi: https://code.google.com/p/modwsgi/
 
.. _isapi-wsgi: https://github.com/hexdump42/isapi-wsgi
docs/setup.rst
Show inline comments
 
@@ -21,13 +21,13 @@ settings, and logging. Extra settings ca
 
    kallithea-cli config-create my.ini host=8.8.8.8 "[handler_console]" formatter=color_formatter
 

	
 
Next, you need to create the databases used by Kallithea. It is recommended to
 
use PostgreSQL or SQLite (default). If you choose a database other than the
 
default, ensure you properly adjust the database URL in your ``my.ini``
 
configuration file to use this other database. Kallithea currently supports
 
PostgreSQL, SQLite and MySQL databases. Create the database by running
 
PostgreSQL, SQLite and MariaDB/MySQL databases. Create the database by running
 
the following command::
 

	
 
    kallithea-cli db-create -c my.ini
 

	
 
This will prompt you for a "root" path. This "root" path is the location where
 
Kallithea will store all of its repositories on the current machine. After
 
@@ -51,13 +51,15 @@ path to the root).
 
.. note:: the given path for Mercurial_ repositories **must** be write
 
          accessible for the application. It's very important since
 
          the Kallithea web interface will work without write access,
 
          but when trying to do a push it will fail with permission
 
          denied errors unless it has write access.
 

	
 
Finally, prepare the front-end by running::
 
Finally, the front-end files must be prepared. This requires ``npm`` version 6
 
or later, which needs ``node.js`` (version 12 or later). Prepare the front-end
 
by running::
 

	
 
    kallithea-cli front-end-build
 

	
 
You are now ready to use Kallithea. To run it simply execute::
 

	
 
    gearbox serve -c my.ini
docs/upgrade.rst
Show inline comments
 
@@ -48,13 +48,13 @@ Back up your database
 
If using SQLite, simply make a copy of the Kallithea database (``.db``)
 
file.
 

	
 
If using PostgreSQL, please consult the documentation for the ``pg_dump``
 
utility.
 

	
 
If using MySQL, please consult the documentation for the ``mysqldump``
 
If using MariaDB/MySQL, please consult the documentation for the ``mysqldump``
 
utility.
 

	
 
Look for ``sqlalchemy.url`` in your configuration file to determine
 
database type, settings, location, etc. If you were running Kallithea 0.3.x or
 
older, this was ``sqlalchemy.db1.url``.
 

	
docs/usage/performance.rst
Show inline comments
 
@@ -37,13 +37,13 @@ Database
 
--------
 

	
 
SQLite is a good option when having a small load on the system. But due to
 
locking issues with SQLite, it is not recommended to use it for larger
 
deployments.
 

	
 
Switching to MySQL or PostgreSQL will result in an immediate performance
 
Switching to PostgreSQL or MariaDB/MySQL will result in an immediate performance
 
increase. A tool like SQLAlchemyGrate_ can be used for migrating to another
 
database platform.
 

	
 

	
 
Horizontal scaling
 
------------------
kallithea/lib/paster_commands/template.ini.mako
Show inline comments
 
@@ -464,12 +464,13 @@ sqlalchemy.url = postgresql://user:pass@
 
%endif
 
%if database_engine == 'mysql':
 
sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
 
%else:
 
#sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
 
%endif
 
<%text>##</%text> Note: the mysql:// prefix should also be used for MariaDB
 

	
 
sqlalchemy.pool_recycle = 3600
 

	
 
<%text>##</%text>##############################
 
<%text>##</%text>   ALEMBIC CONFIGURATION    ##
 
<%text>##</%text>##############################
kallithea/lib/vcs/backends/hg/changeset.py
Show inline comments
 
@@ -326,13 +326,13 @@ class MercurialChangeset(BaseChangeset):
 

	
 
        als = self.repository.alias
 
        for k, vals in self._extract_submodules().items():
 
            #vals = url,rev,type
 
            loc = vals[0]
 
            cs = vals[1]
 
            dirnodes.append(SubModuleNode(k, url=loc, changeset=cs,
 
            dirnodes.append(SubModuleNode(safe_str(k), url=safe_str(loc), changeset=cs,
 
                                          alias=als))
 
        nodes = dirnodes + filenodes
 
        for node in nodes:
 
            self.nodes[node.path] = node
 
        nodes.sort()
 
        return nodes
kallithea/lib/vcs/backends/hg/repository.py
Show inline comments
 
@@ -227,13 +227,13 @@ class MercurialRepository(BaseRepository
 

	
 
    def _get_bookmarks(self):
 
        if self._empty:
 
            return {}
 

	
 
        return OrderedDict(sorted(
 
            ((safe_str(n), ascii_str(h)) for n, h in self._repo._bookmarks.items()),
 
            ((safe_str(n), ascii_str(mercurial.node.hex(h))) for n, h in self._repo._bookmarks.items()),
 
            reverse=True,
 
            key=lambda x: x[0],  # sort by name
 
        ))
 

	
 
    def _get_all_revisions(self):
 
        return [ascii_str(self._repo[x].hex()) for x in self._repo.filtered(b'visible').changelog.revs()]
kallithea/lib/vcs/nodes.py
Show inline comments
 
@@ -600,7 +600,7 @@ class SubModuleNode(Node):
 
    def name(self):
 
        """
 
        Returns name of the node so if its path
 
        then only last part is returned.
 
        """
 
        org = self.path.rstrip('/').rsplit('/', 1)[-1]
 
        return '%s @ %s' % (org, self.changeset.short_id)
 
        return '%s @ %s' % (org, safe_str(self.changeset.short_id))
0 comments (0 inline, 0 general)