Delete repo-group
Mads Kiilerich
mads at kiilerich.com
Tue Sep 28 11:51:19 UTC 2021
On 7/22/21 18:13, A. Klitzing wrote:
> By the way... I receive this in my log if I create a new repository
> with a clone:
> Fehler: Hook changegroup.kallithea_push_action löste eine Ausnahme
> aus: Environment variable KALLITHEA_EXTRAS not found
> But the repository works after that.
I have noticed that too.
The hook is called late and is not fatal that the hook fails fatally.
There are some implementation details that make it tricky to fix correctly.
KALLITHEA_EXTRAS is an environment variable used to provide context for
Mercurial and Git hooks. It is essentially a global variable that is set
in the Kallithea worker process. (That is one of the reasons that we
can't use multiple worker threads but have to use separate worker
processes.)
KALLITHEA_EXTRAS carry some context information (like username and IP)
that most of the app shouldn't care about. It is thus generally set
early on in the request processing, so it can be used many levels and
fuction calls later.
For repository creation there are many code paths that lead to that
code, and it depends on data and disk state whether the repo is created
(in which case hooks are invoked and KALLITHEA_EXTRAS is relevant), or
if it just use an existing repo (where KALLITHEA_EXTRAS isn't used).
Some ideas for refactorings that could help:
1. Make repository creation explicit. Move it out of
MercurialRepository/GitRepository __init__ .... but it currently depends
on support from the semi-initialized Repository instance.
2. Pass the hook environment as data through all the layers and avoid
setting the environment variable in the worker process ... or set it as
late as possible. (For Git, it could just be set in the git subprocess.
Mercurial hooks run in the process and might use different tricks.)
But it is also possible that this particular code path can be fixed.
/Mads
More information about the kallithea-general
mailing list