view hgext/hooklib/enforce_draft_commits.py @ 46201:b986e3342827

debugsetparents: add various warning in the help message I am tired to see people shooting themself in the foot with this. So lets add more warning. At that point we should probably rename it or add extra confirmation flag. This is a debug command anyway we can break BC on it. Differential Revision: https://phab.mercurial-scm.org/D9534
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 07 Dec 2020 22:27:43 +0100
parents 4cabeea6d214
children 6000f5b25c9b
line wrap: on
line source

# Copyright 2020 Joerg Sonnenberger <joerg@bec.de>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

"""enforce_draft_commits us a hook to ensure that all new changesets are
in the draft phase. This allows enforcing policies for work-in-progress
changes in overlay repositories, i.e. a shared hidden repositories with
different views for work-in-progress code and public history.

Usage:
  [hooks]
  pretxnclose-phase.enforce_draft_commits = \
    python:hgext.hooklib.enforce_draft_commits.hook
"""

from __future__ import absolute_import

from mercurial.i18n import _
from mercurial import (
    error,
    pycompat,
)


def hook(ui, repo, hooktype, node=None, **kwargs):
    if hooktype != b"pretxnclose-phase":
        raise error.Abort(
            _(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
        )
    ctx = repo.unfiltered()[node]
    if kwargs['oldphase']:
        raise error.Abort(
            _(b'Phase change from %r to %r for %s rejected')
            % (
                pycompat.bytestr(kwargs['oldphase']),
                pycompat.bytestr(kwargs['phase']),
                ctx,
            )
        )
    elif kwargs['phase'] != b'draft':
        raise error.Abort(
            _(b'New changeset %s in phase %r rejected')
            % (ctx, pycompat.bytestr(kwargs['phase']))
        )