Mercurial > hg
view hgext/hooklib/enforce_draft_commits.py @ 45059:79f6f9fa18c1
documentation: add some internals documentation about bid merge
This is an important algorithm that was only documented on the wiki so far.
Some update to the algorithm (and associated doc) is to expected in the future
since the bid merge algorithm is bug-ridden when it comes to file deletion comes
to play.
Differential Revision: https://phab.mercurial-scm.org/D8711
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 22 Jun 2020 13:32:20 +0200 |
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'])) )