diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -36,3 +36,4 @@ be788a89a939ebd63606220064bd624fa9d5c9c9 15c90a04098a373ac761fab07695fd80dde3bcdb v4.11.5 77aff155b3251cc00394a49f5e8f2c99e33149a7 v4.11.6 c218a1ce5d370c2e671d42a91684b3fc2c91b81d v4.12.0 +80085fb846cc948195a5c76b579ca34cbc49b59b v4.12.1 diff --git a/vcsserver/hook_utils/hook_templates/git_post_receive.py.tmpl b/vcsserver/hook_utils/hook_templates/git_post_receive.py.tmpl --- a/vcsserver/hook_utils/hook_templates/git_post_receive.py.tmpl +++ b/vcsserver/hook_utils/hook_templates/git_post_receive.py.tmpl @@ -25,7 +25,7 @@ def main(): # this allows simply push to this repo even without rhodecode sys.exit(0) - if os.environ.get('RC_SKIP_HOOKS'): + if os.environ.get('RC_SKIP_HOOKS') or os.environ.get('RC_SKIP_GIT_HOOKS'): sys.exit(0) repo_path = os.getcwd() diff --git a/vcsserver/hook_utils/hook_templates/git_pre_receive.py.tmpl b/vcsserver/hook_utils/hook_templates/git_pre_receive.py.tmpl --- a/vcsserver/hook_utils/hook_templates/git_pre_receive.py.tmpl +++ b/vcsserver/hook_utils/hook_templates/git_pre_receive.py.tmpl @@ -25,7 +25,7 @@ def main(): # this allows simply push to this repo even without rhodecode sys.exit(0) - if os.environ.get('RC_SKIP_HOOKS'): + if os.environ.get('RC_SKIP_HOOKS') or os.environ.get('RC_SKIP_GIT_HOOKS'): sys.exit(0) repo_path = os.getcwd() diff --git a/vcsserver/hook_utils/hook_templates/svn_post_commit_hook.py.tmpl b/vcsserver/hook_utils/hook_templates/svn_post_commit_hook.py.tmpl --- a/vcsserver/hook_utils/hook_templates/svn_post_commit_hook.py.tmpl +++ b/vcsserver/hook_utils/hook_templates/svn_post_commit_hook.py.tmpl @@ -26,7 +26,7 @@ def main(): # this allows simply push to this repo even without rhodecode sys.exit(0) - if os.environ.get('RC_SKIP_HOOKS'): + if os.environ.get('RC_SKIP_HOOKS') or os.environ.get('RC_SKIP_SVN_HOOKS'): sys.exit(0) repo_path = os.getcwd() push_data = sys.argv[1:] diff --git a/vcsserver/hook_utils/hook_templates/svn_pre_commit_hook.py.tmpl b/vcsserver/hook_utils/hook_templates/svn_pre_commit_hook.py.tmpl --- a/vcsserver/hook_utils/hook_templates/svn_pre_commit_hook.py.tmpl +++ b/vcsserver/hook_utils/hook_templates/svn_pre_commit_hook.py.tmpl @@ -29,7 +29,7 @@ def main(): # exit with success if we cannot import vcsserver.hooks !! # this allows simply push to this repo even without rhodecode sys.exit(0) - if os.environ.get('RC_SKIP_HOOKS'): + if os.environ.get('RC_SKIP_HOOKS') or os.environ.get('RC_SKIP_SVN_HOOKS'): sys.exit(0) repo_path = os.getcwd() push_data = sys.argv[1:] diff --git a/vcsserver/hooks.py b/vcsserver/hooks.py --- a/vcsserver/hooks.py +++ b/vcsserver/hooks.py @@ -485,17 +485,33 @@ def git_post_receive(unused_repo_path, r return _call_hook('post_push', extras, GitMessageWriter()) +def _get_extras_from_txn_id(path, txn_id): + extras = {} + try: + cmd = ['svnlook', 'pget', + '-t', txn_id, + '--revprop', path, 'rc-scm-extras'] + stdout, stderr = subprocessio.run_command( + cmd, env=os.environ.copy()) + extras = json.loads(base64.urlsafe_b64decode(stdout)) + except Exception: + log.exception('Failed to extract extras info from txn_id') + + return extras + + def svn_pre_commit(repo_path, commit_data, env): path, txn_id = commit_data branches = [] tags = [] - cmd = ['svnlook', 'pget', - '-t', txn_id, - '--revprop', path, 'rc-scm-extras'] - stdout, stderr = subprocessio.run_command( - cmd, env=os.environ.copy()) - extras = json.loads(base64.urlsafe_b64decode(stdout)) + if env.get('RC_SCM_DATA'): + extras = json.loads(env['RC_SCM_DATA']) + else: + # fallback method to read from TXN-ID stored data + extras = _get_extras_from_txn_id(path, txn_id) + if not extras: + return 0 extras['commit_ids'] = [] extras['txn_id'] = txn_id @@ -504,10 +520,25 @@ def svn_pre_commit(repo_path, commit_dat 'bookmarks': [], 'tags': tags, } - sys.stderr.write(str(extras)) + return _call_hook('pre_push', extras, SvnMessageWriter()) +def _get_extras_from_commit_id(commit_id, path): + extras = {} + try: + cmd = ['svnlook', 'pget', + '-r', commit_id, + '--revprop', path, 'rc-scm-extras'] + stdout, stderr = subprocessio.run_command( + cmd, env=os.environ.copy()) + extras = json.loads(base64.urlsafe_b64decode(stdout)) + except Exception: + log.exception('Failed to extract extras info from commit_id') + + return extras + + def svn_post_commit(repo_path, commit_data, env): """ commit_data is path, rev, txn_id @@ -516,13 +547,13 @@ def svn_post_commit(repo_path, commit_da branches = [] tags = [] - cmd = ['svnlook', 'pget', - '-r', commit_id, - '--revprop', path, 'rc-scm-extras'] - stdout, stderr = subprocessio.run_command( - cmd, env=os.environ.copy()) - - extras = json.loads(base64.urlsafe_b64decode(stdout)) + if env.get('RC_SCM_DATA'): + extras = json.loads(env['RC_SCM_DATA']) + else: + # fallback method to read from TXN-ID stored data + extras = _get_extras_from_commit_id(commit_id, path) + if not extras: + return 0 extras['commit_ids'] = [commit_id] extras['txn_id'] = txn_id @@ -535,9 +566,7 @@ def svn_post_commit(repo_path, commit_da if 'repo_size' in extras['hooks']: try: _call_hook('repo_size', extras, SvnMessageWriter()) - except: + except Exception: pass return _call_hook('post_push', extras, SvnMessageWriter()) - -