Running Kallithea on Windows

Mads Kiilerich mads at kiilerich.com
Tue Feb 9 17:51:40 UTC 2016


On 02/09/2016 03:58 PM, Angel Ezquerra wrote:
> Hi,
>
> I am trying to setup Kallithea on a windows server and I have a few
> questions. This email will be a bit long because I have many questions
> and I'd like to give you some context first. If you want to just skip
> to the questions you can find them below. But first, some context:
>
> - Our main motivation to use Kallithea (at this point) is to gain the
> ability to perform code reviews on our code.
>
> - We also wonder if Kallithea might have better performance that the
> existing "plain" mercurial server.

I doubt it. It calls out to the same hgweb. But it is usually "fast 
enough". If not, it is probably a configuration / setup / architecture 
issue.

> Our current setup is as follows:
> - We have an Apache-based (WSGI) mercurial server, running on a
> Windows Server machine.
>      - The mercurial server is a "plain" mercurial server that we have
> customized a bit:
>          - We have added a header to every mercurial server web page,
> containing links to our issue tracker and to our customized TortoiseHg
> (we use the web.MOTD setting to do this).
>          - The header also has a link to open a dialog to  create a
> repository and also to create a "link" (an NTFS junction) to an
> existing repository
>
> - We have over 1.500 mercurial repositories, organized in multiple
> directories (and directories within directories, etc). To give you an
> idea, the root contains 27 directories (corresponding to several
> groups, projects, etc)
>      - Some of the repos are pretty big (hundreds of megabytes) as they
> contain binary files (I have no control over this, unfortunately).
>      - May of our repositories contain subrepos.

How are they organized? Are you stuck with some hardcoded URLs?

>      - In order to avoid duplication and to share the same components
> among multiple projects we often create "repository links", which are
> NTFS junctions (akin to Unix soft links)

Why do the same repository have to appear in multiple places? (Perhaps 
related to the previous question?)

>      - We found that with that many repositories it is not practical to
> use mercurial's "recursive path" definitions (i.e. using "**") to let
> the server find the repos. It is just way too slow. That is why
> instead we keep a list of every repository on our server, which is
> automatically updated when someone creates a new repository or link
> through our custom dialogs, and also by a script that runs every 15
> minutes (in case an admin creates a repository manually)

Will you use Kallithea for creating repos?

> So now the questions:
>
> 1. Is it possible to configure Kallithea as a "code review" only tool,
> disabling both push and, above all, pull access?

If you want to that as 'configuration' only, I would do it by 
configuring filter in the web server.

I would probably prefer to have a local code customization that disable 
protocol access.

> 2. How well does Kallithea support subrepos? It seems that Kallithea
> does not find subrepos when it scans for repositories, but maybe I
> missed something...

There is a small snippet on 
http://kallithea.readthedocs.org/en/latest/usage/vcs_support.html#working-with-mercurial-subrepositories 
- but it doesn't say much.

I think 'server structure matches working directory structure' is 
problematic. There is the inherent problem that URLs become ambiguous 
when using that scheme. That ambiguity has to be resolved somewhere. 
Something could perhaps be implemented in Kallithea ... but I guess it 
would be better to do it elsewhere (web server configuration or client 
side).

> 3. How well would Kallithea coexist with our existing mercurial server
> if they both pointed to the same repositories? That is, if we
> configure Kallithea to look for repositories on the same location that
> the existing mercurial server looks for them, would there be any
> problems? In theory mercurial creates locks to avoid problems with
> concurrent repository access. Should this work?
>      - The reason I wonder this is that, at least for now, I'd rather
> not replace our server with Kallithea, but add it as an alternative
> interface. This would give people some time to tray it and give me
> feedback.

I don't know 'mercurial server' (and I hate the name for being so 
misleading).

Repo write operations still use the same lock as hgweb ... but you don't 
want write anyway?

Kallithea uses another way of repo cache invalidation than hgweb. You 
can call something like
paster update-repoinfo /srv/kallithea/kallithea.ini --invalidate-cache 
--update-only=$repopath
from a hgweb push hook.

> 4. Is there a way to configure the Kallithea interface, other than
> manually modifying the HTML templates? In particular, is there a way
> to add some sort of banner to every page server by Kallithea (to add
> links to our issue tracker, our TortoiseHg installer, and so on)?
>      - Also, is there a way to "brand" our server (e.g. adding our
> company logo, changing the colors to our corporate colors, etc?)

There is the 'bugtracker' setting in the .ini file. There is also site 
branching in .../_admin/settings/global . Beyond that, you currently 
have the full freedom to hack the code ;-)

> 5. How fast can we expect Kallithea to be with our environment (in
> particular with the number of repositories that we have)?
>      - Should we expect the "raw  Kallithea" server to perform well or
> should we investigate integrating it with our Apache server, or
> perhaps using some other server (ISS, etc)?

What do you mean with "raw Kallithea"? The development standalone web 
server?

I would use a real web server - mostly to get easy management and a full 
featured web server and a simple setup. I prefer mod_wsgi.

No matter what: For bulk operations it calls out to the same Python 
mercurial stuff as hgweb and it will perform pretty much the same. 
Python is probably the bottleneck but still "fast enough" to saturate a 
Gbit connection on a normal server. Using a 'high performance' web 
server will probably not buy you anything.

> 6. How is the code review information stored by Kallithea?
>      - Can be exported somehow? Can it be copied into a new Kallithea server?

It is stored in the database. You can get it with sql or other tools. I 
don't know what format you would want it in and I am not aware of any 
tools for any other format than sql dump.
> 7. What would be the best way to run Kallithea as a service on
> Windows? There might be some page that explains this. If so just let
> me know.

I assume you have browsed through the documentation and have seen the 
documentation of using Apache (the documentation assumes unix but I 
guess it is pretty much the same on windows) and IIS.

People with experience from running on Windows can probably share 
opinions and experience.


I hope this helps - and that you can help improving our documentation so 
it would have answered any questions I might have given a sufficiently 
good answer to here ;-)

/Mads



More information about the kallithea-general mailing list