upgrade: speed up when we have only nodemap to downgrade
Similar to what we do on upgrade, if we have only persistent-nodemap to
downgrade we will just delete the nodemap files and update repository
requirements instead of processing all the revlogs.
After downgrade, we are left with unrequired docket and transaction files which
seems fine but can work on deleting them if someone feels we should.
Differential Revision: https://phab.mercurial-scm.org/D9992
# 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.
"""reject_merge_commits is a hook to check new changesets for merge commits.
Merge commits are allowed only between different branches, i.e. merging
a feature branch into the main development branch. This can be used to
enforce policies for linear commit histories.
Usage:
[hooks]
pretxnchangegroup.reject_merge_commits = \
python:hgext.hooklib.reject_merge_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"pretxnchangegroup":
raise error.Abort(
_(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
)
ctx = repo.unfiltered()[node]
for rev in repo.changelog.revs(start=ctx.rev()):
rev = repo[rev]
parents = rev.parents()
if len(parents) < 2:
continue
if all(repo[p].branch() == rev.branch() for p in parents):
raise error.Abort(
_(
b'%s rejected as merge on the same branch. '
b'Please consider rebase.'
)
% rev
)