hgext/hooklib/enforce_draft_commits.py
changeset 44413 4cabeea6d214
child 48875 6000f5b25c9b
equal deleted inserted replaced
44412:edc8504bc26b 44413:4cabeea6d214
       
     1 # Copyright 2020 Joerg Sonnenberger <joerg@bec.de>
       
     2 #
       
     3 # This software may be used and distributed according to the terms of the
       
     4 # GNU General Public License version 2 or any later version.
       
     5 
       
     6 """enforce_draft_commits us a hook to ensure that all new changesets are
       
     7 in the draft phase. This allows enforcing policies for work-in-progress
       
     8 changes in overlay repositories, i.e. a shared hidden repositories with
       
     9 different views for work-in-progress code and public history.
       
    10 
       
    11 Usage:
       
    12   [hooks]
       
    13   pretxnclose-phase.enforce_draft_commits = \
       
    14     python:hgext.hooklib.enforce_draft_commits.hook
       
    15 """
       
    16 
       
    17 from __future__ import absolute_import
       
    18 
       
    19 from mercurial.i18n import _
       
    20 from mercurial import (
       
    21     error,
       
    22     pycompat,
       
    23 )
       
    24 
       
    25 
       
    26 def hook(ui, repo, hooktype, node=None, **kwargs):
       
    27     if hooktype != b"pretxnclose-phase":
       
    28         raise error.Abort(
       
    29             _(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
       
    30         )
       
    31     ctx = repo.unfiltered()[node]
       
    32     if kwargs['oldphase']:
       
    33         raise error.Abort(
       
    34             _(b'Phase change from %r to %r for %s rejected')
       
    35             % (
       
    36                 pycompat.bytestr(kwargs['oldphase']),
       
    37                 pycompat.bytestr(kwargs['phase']),
       
    38                 ctx,
       
    39             )
       
    40         )
       
    41     elif kwargs['phase'] != b'draft':
       
    42         raise error.Abort(
       
    43             _(b'New changeset %s in phase %r rejected')
       
    44             % (ctx, pycompat.bytestr(kwargs['phase']))
       
    45         )