Hi Tim, Did you intend to submit this patch? If so, please clarify the goal and context of this patch more clearly.
Thanks, Thomas El mar., 20 oct. 2020 a las 17:51, Tim Ooms (<tim.o...@aeronomie.be>) escribió: > # HG changeset patch > # User Tim Ooms <tatan...@users.noreply.github.com> > # Date 1603201903 -7200 > # Tue Oct 20 15:51:43 2020 +0200 > # Node ID 672e57b165d0c1774b692b5706a174bf98f42e4c > # Parent b9b53e25a08d3714c54d82641b419e6d01820e12 > git: move non-kallithea hooks and execute other hooks > > diff -r b9b53e25a08d -r 672e57b165d0 kallithea/model/scm.py > --- a/kallithea/model/scm.py Mon Oct 19 12:18:28 2020 +0200 > +++ b/kallithea/model/scm.py Tue Oct 20 15:51:43 2020 +0200 > @@ -25,10 +25,12 @@ > :license: GPLv3, see LICENSE.md for more details. > """ > > +import datetime > import logging > import os > import posixpath > import re > +import stat > import sys > import traceback > > @@ -694,7 +696,7 @@ > Creates a kallithea hook inside a git repository > > :param repo: Instance of VCS repo > - :param force: Overwrite existing non-Kallithea hooks > + :param force: Move existing non-Kallithea hooks > """ > > hooks_path = os.path.join(repo.path, 'hooks') > @@ -730,14 +732,46 @@ > other_hook = True > > if other_hook and not force: > - log.warning('skipping overwriting hook file %s', > hook_file) > + log.warning('skip moving non-Kallithea hook file %s', > + hook_file) > else: > + # if we want to write the hook, > + # we move the other hook out of the way > + if other_hook: > + # existing non-kallithea hook script will be renamed > + # additional scripts can be named like: > + # "%s-receive.kallithea-extern.YYYYmmdd.manual > + # all "%s-receive.kallithea-extern.*.*" hook scripts > + # will be executed in order > + moved_hook_file = '%s.kallithea-extern.%s.%s' % ( > + hook_file, > + > datetime.datetime.now().strftime("%Y%m%d%H%M%S%f"), > + kallithea.__version__) > + log.warning('moving hook file %s to %s', > + hook_file, moved_hook_file) > + # least chances to break an existing script by > renaming > + # moving to a subdir may break scripts due to changed > paths > + os.rename(hook_file, moved_hook_file) > + # now we can write our hook > log.debug('writing %s hook file !', h_type) > try: > with open(hook_file, 'wb') as f: > tmpl = tmpl.replace(b'_TMPL_', > safe_bytes(kallithea.__version__)) > f.write(tmpl) > - os.chmod(hook_file, 0o755) > + try: > + if not os.path.islink(hook_file): > + # add permissions we (may) need > + # other bits are up to umask/inherited > permissions > + os.chmod( > + hook_file, os.stat(hook_file).st_mode > + | stat.S_IRUSR | stat.S_IWUSR | > stat.S_IXUSR > + | stat.S_IRGRP | stat.S_IXGRP > + | stat.S_IROTH | stat.S_IXOTH) > + # else this will throw a permission error > + # but someone choose to create a symlink > + except IOError as e: > + log.error('error changing permissions on hoook > %s: %s', > + hook_file, e) > except IOError as e: > log.error('error writing hook %s: %s', hook_file, e) > > diff -r b9b53e25a08d -r 672e57b165d0 > kallithea/templates/py/git_post_receive_hook.py > --- a/kallithea/templates/py/git_post_receive_hook.py Mon Oct 19 > 12:18:28 2020 +0200 > +++ b/kallithea/templates/py/git_post_receive_hook.py Tue Oct 20 > 15:51:43 2020 +0200 > @@ -9,6 +9,8 @@ > """ > > import os > +import pathlib > +import subprocess > import sys > > import kallithea.lib.hooks > @@ -30,6 +32,11 @@ > def main(): > repo_path = os.path.abspath('.') > git_stdin_lines = sys.stdin.readlines() > + full_stdin = ''.join(git_stdin_lines) > + > + for file in > sorted(pathlib.Path('hooks').glob('post-receive.kallithea-extern.*.*')): > + subprocess.run([file], input=full_stdin, universal_newlines=True) > + > sys.exit(kallithea.lib.hooks.handle_git_post_receive(repo_path, > git_stdin_lines)) > > > diff -r b9b53e25a08d -r 672e57b165d0 > kallithea/templates/py/git_pre_receive_hook.py > --- a/kallithea/templates/py/git_pre_receive_hook.py Mon Oct 19 > 12:18:28 2020 +0200 > +++ b/kallithea/templates/py/git_pre_receive_hook.py Tue Oct 20 > 15:51:43 2020 +0200 > @@ -9,6 +9,8 @@ > """ > > import os > +import pathlib > +import subprocess > import sys > > import kallithea.lib.hooks > @@ -30,6 +32,11 @@ > def main(): > repo_path = os.path.abspath('.') > git_stdin_lines = sys.stdin.readlines() > + full_stdin = ''.join(git_stdin_lines) > + > + for file in > sorted(pathlib.Path('hooks').glob('pre-receive.kallithea-extern.*.*')): > + subprocess.run([file], input=full_stdin, universal_newlines=True) > + > sys.exit(kallithea.lib.hooks.handle_git_pre_receive(repo_path, > git_stdin_lines)) > > > > _______________________________________________ > kallithea-general mailing list > kallithea-general@sfconservancy.org > https://lists.sfconservancy.org/mailman/listinfo/kallithea-general >
_______________________________________________ kallithea-general mailing list kallithea-general@sfconservancy.org https://lists.sfconservancy.org/mailman/listinfo/kallithea-general