##// END OF EJS Templates
git: ensure all dirstate state values are bytes...
git: ensure all dirstate state values are bytes I'm not sure how this particular git status occurs, but after the fallout of issue 6510 and getting into the issue 6511 state where `git status` shows the files as modified in both the "to be committed" and "not staged" lists, `hg diff` was crashing in `workingctx.__contains__()`. Differential Revision: https://phab.mercurial-scm.org/D10532

File last commit:

r44897:4cabeea6 default
r47828:9cea55ca stable
Show More
enforce_draft_commits.py
45 lines | 1.4 KiB | text/x-python | PythonLexer
/ hgext / hooklib / enforce_draft_commits.py
Joerg Sonnenberger
hgext: start building a library for simple hooks...
r44897 # 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']))
)