git_post_receive.py.tmpl
59 lines
| 1.5 KiB
| application/x-cheetah
|
CheetahLexer
r407 | #!_ENV_ | |||
r1261 | ||||
r407 | import os | |||
import sys | ||||
path_adjust = [_PATH_] | ||||
if path_adjust: | ||||
sys.path = path_adjust | ||||
r1261 | # special trick to pass in some information from rc to hooks | |||
# mod_dav strips ALL env vars and we can't even access things like PATH | ||||
for env_k, env_v in _OS_EXPAND_: | ||||
os.environ[env_k] = env_v | ||||
r407 | try: | |||
from vcsserver import hooks | ||||
except ImportError: | ||||
if os.environ.get('RC_DEBUG_GIT_HOOK'): | ||||
import traceback | ||||
r1077 | print(traceback.format_exc()) | |||
r407 | hooks = None | |||
# TIMESTAMP: _DATE_ | ||||
RC_HOOK_VER = '_TMPL_' | ||||
def main(): | ||||
if hooks is None: | ||||
# exit with success if we cannot import vcsserver.hooks !! | ||||
# this allows simply push to this repo even without rhodecode | ||||
sys.exit(0) | ||||
r435 | if os.environ.get('RC_SKIP_HOOKS') or os.environ.get('RC_SKIP_GIT_HOOKS'): | |||
r407 | sys.exit(0) | |||
repo_path = os.getcwd() | ||||
push_data = sys.stdin.readlines() | ||||
r1261 | ||||
r407 | # 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 | ||||
# like IP or username from basic-auth | ||||
r1261 | ||||
os.environ['RC_HOOK_VER'] = RC_HOOK_VER | ||||
r407 | try: | |||
result = hooks.git_post_receive(repo_path, push_data, os.environ) | ||||
sys.exit(result) | ||||
except Exception as error: | ||||
# TODO: johbo: Improve handling of this special case | ||||
if not getattr(error, '_vcs_kind', None) == 'repo_locked': | ||||
raise | ||||
r1077 | print(f'ERROR: {error}') | |||
r407 | sys.exit(1) | |||
sys.exit(0) | ||||
if __name__ == '__main__': | ||||
main() | ||||