hooks: added new pretx hook to allow mercurial checks such as protected branches, or force push.
This commit is contained in:
parent
2ccbac2f22
commit
1f65204749
8 changed files with 3985 additions and 6 deletions
|
|
@ -51,7 +51,7 @@ PYRAMID_SETTINGS = {}
|
|||
EXTENSIONS = {}
|
||||
|
||||
__version__ = ('.'.join((str(each) for each in VERSION[:3])))
|
||||
__dbversion__ = 64 # defines current db version for migrations
|
||||
__dbversion__ = 65 # defines current db version for migrations
|
||||
__platform__ = platform.system()
|
||||
__license__ = 'AGPLv3, and Commercial License'
|
||||
__author__ = 'RhodeCode GmbH'
|
||||
|
|
|
|||
|
|
@ -315,6 +315,7 @@ class DbManage(object):
|
|||
(RhodeCodeUi.HOOK_PRE_PULL, 'python:vcsserver.hooks.pre_pull'),
|
||||
(RhodeCodeUi.HOOK_PULL, 'python:vcsserver.hooks.log_pull_action'),
|
||||
(RhodeCodeUi.HOOK_PRE_PUSH, 'python:vcsserver.hooks.pre_push'),
|
||||
(RhodeCodeUi.HOOK_PRETX_PUSH, 'python:vcsserver.hooks.pre_push'),
|
||||
(RhodeCodeUi.HOOK_PUSH, 'python:vcsserver.hooks.log_push_action'),
|
||||
|
||||
]
|
||||
|
|
|
|||
3909
rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py
Normal file
3909
rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py
Normal file
File diff suppressed because it is too large
Load diff
63
rhodecode/lib/dbmigrate/versions/065_version_4_7_0.py
Normal file
63
rhodecode/lib/dbmigrate/versions/065_version_4_7_0.py
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import logging
|
||||
|
||||
from sqlalchemy import *
|
||||
from rhodecode.model import meta
|
||||
from rhodecode.lib.dbmigrate.versions import _reset_base, notify
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_by_key(cls, key):
|
||||
return cls.query().filter(cls.ui_key == key).scalar()
|
||||
|
||||
|
||||
def create_or_update_hook(cls, key, val, SESSION):
|
||||
new_ui = get_by_key(cls, key) or cls()
|
||||
new_ui.ui_section = 'hooks'
|
||||
new_ui.ui_active = True
|
||||
new_ui.ui_key = key
|
||||
new_ui.ui_value = val
|
||||
|
||||
SESSION().add(new_ui)
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
"""
|
||||
Upgrade operations go here.
|
||||
Don't create your own engine; bind migrate_engine to your metadata
|
||||
"""
|
||||
_reset_base(migrate_engine)
|
||||
from rhodecode.lib.dbmigrate.schema import db_4_7_0_0 as db
|
||||
|
||||
# issue fixups
|
||||
fixups(db, meta.Session)
|
||||
|
||||
|
||||
def downgrade(migrate_engine):
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
|
||||
def fixups(models, _SESSION):
|
||||
|
||||
cleanup_if_present = (
|
||||
models.RhodeCodeUi.HOOK_PRETX_PUSH,
|
||||
)
|
||||
|
||||
for hook in cleanup_if_present:
|
||||
ui_cfg = models.RhodeCodeUi.query().filter(
|
||||
models.RhodeCodeUi.ui_key == hook).scalar()
|
||||
if ui_cfg is not None:
|
||||
log.info('Removing RhodeCodeUI for hook "%s".', hook)
|
||||
_SESSION().delete(ui_cfg)
|
||||
|
||||
to_add = [
|
||||
(models.RhodeCodeUi.HOOK_PRETX_PUSH,
|
||||
'python:vcsserver.hooks.pre_push'),
|
||||
]
|
||||
|
||||
for hook, value in to_add:
|
||||
log.info('Adding RhodeCodeUI for hook "%s".', hook)
|
||||
create_or_update_hook(models.RhodeCodeUi, hook, value, _SESSION)
|
||||
|
||||
_SESSION().commit()
|
||||
|
|
@ -411,6 +411,7 @@ def config_data_from_db(clear_session=True, repo=None):
|
|||
skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PULL))
|
||||
if 'push' not in enabled_hook_classes:
|
||||
skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PUSH))
|
||||
skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRETX_PUSH))
|
||||
|
||||
config = [entry for entry in config if entry[:2] not in skip_entries]
|
||||
|
||||
|
|
|
|||
|
|
@ -350,6 +350,7 @@ class RhodeCodeUi(Base, BaseModel):
|
|||
HOOK_PRE_PULL = 'preoutgoing.pre_pull'
|
||||
HOOK_PULL = 'outgoing.pull_logger'
|
||||
HOOK_PRE_PUSH = 'prechangegroup.pre_push'
|
||||
HOOK_PRETX_PUSH = 'pretxnchangegroup.pre_push'
|
||||
HOOK_PUSH = 'changegroup.push_logger'
|
||||
|
||||
# TODO: johbo: Unify way how hooks are configured for git and hg,
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ class SettingNotFound(Exception):
|
|||
class SettingsModel(BaseModel):
|
||||
BUILTIN_HOOKS = (
|
||||
RhodeCodeUi.HOOK_REPO_SIZE, RhodeCodeUi.HOOK_PUSH,
|
||||
RhodeCodeUi.HOOK_PRE_PUSH, RhodeCodeUi.HOOK_PULL,
|
||||
RhodeCodeUi.HOOK_PRE_PULL)
|
||||
RhodeCodeUi.HOOK_PRE_PUSH, RhodeCodeUi.HOOK_PRETX_PUSH,
|
||||
RhodeCodeUi.HOOK_PULL, RhodeCodeUi.HOOK_PRE_PULL)
|
||||
HOOKS_SECTION = 'hooks'
|
||||
|
||||
def __init__(self, sa=None, repo=None):
|
||||
|
|
|
|||
|
|
@ -81,23 +81,27 @@ def disable_hooks(request, hooks):
|
|||
|
||||
|
||||
HOOK_PRE_PUSH = db.RhodeCodeUi.HOOK_PRE_PUSH
|
||||
HOOK_PRETX_PUSH = db.RhodeCodeUi.HOOK_PRETX_PUSH
|
||||
HOOK_PUSH = db.RhodeCodeUi.HOOK_PUSH
|
||||
HOOK_PRE_PULL = db.RhodeCodeUi.HOOK_PRE_PULL
|
||||
HOOK_PULL = db.RhodeCodeUi.HOOK_PULL
|
||||
HOOK_REPO_SIZE = db.RhodeCodeUi.HOOK_REPO_SIZE
|
||||
|
||||
HG_HOOKS = frozenset(
|
||||
(HOOK_PRE_PULL, HOOK_PULL, HOOK_PRE_PUSH, HOOK_PUSH, HOOK_REPO_SIZE))
|
||||
(HOOK_PRE_PULL, HOOK_PULL, HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_PUSH,
|
||||
HOOK_REPO_SIZE))
|
||||
|
||||
|
||||
@pytest.mark.parametrize('disabled_hooks,expected_hooks', [
|
||||
([], HG_HOOKS),
|
||||
([HOOK_PRE_PUSH, HOOK_REPO_SIZE], [HOOK_PRE_PULL, HOOK_PULL, HOOK_PUSH]),
|
||||
(HG_HOOKS, []),
|
||||
|
||||
([HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_REPO_SIZE], [HOOK_PRE_PULL, HOOK_PULL, HOOK_PUSH]),
|
||||
|
||||
# When a pull/push hook is disabled, its pre-pull/push counterpart should
|
||||
# be disabled too.
|
||||
([HOOK_PUSH], [HOOK_PRE_PULL, HOOK_PULL, HOOK_REPO_SIZE]),
|
||||
([HOOK_PULL], [HOOK_PRE_PUSH, HOOK_PUSH, HOOK_REPO_SIZE]),
|
||||
([HOOK_PULL], [HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_PUSH, HOOK_REPO_SIZE]),
|
||||
])
|
||||
def test_make_db_config_hg_hooks(pylonsapp, request, disabled_hooks,
|
||||
expected_hooks):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue