##// END OF EJS Templates
hgweb: use a multidict for holding query string parameters...
hgweb: use a multidict for holding query string parameters My intention with refactoring the WSGI code was to make it easier to read. I initially wanted to vendor and use WebOb, because it seems to be a pretty reasonable abstraction layer for WSGI. However, it isn't using relative imports and I didn't want to deal with the hassle of patching it. But that doesn't mean we can't use good ideas from WebOb. WebOb has a "multidict" data structure for holding parsed query string and POST form data. It quacks like a dict but allows you to store multiple values for each key. It offers mechanisms to return just one value, all values, or return 1 value asserting that only 1 value is set. I quite like its API. This commit implements a read-only "multidict" in the spirit of WebOb's multidict. We replace the query string attributes of our parsed request with an instance of it. Differential Revision: https://phab.mercurial-scm.org/D2776

File last commit:

r35243:490df753 default
r36878:ec0af9c5 default
Show More
rewriteutil.py
53 lines | 1.6 KiB | text/x-python | PythonLexer
# rewriteutil.py - utility functions for rewriting changesets
#
# Copyright 2017 Octobus <contact@octobus.net>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
from .i18n import _
from . import (
error,
node,
obsolete,
revset,
)
def precheck(repo, revs, action='rewrite'):
"""check if revs can be rewritten
action is used to control the error message.
Make sure this function is called after taking the lock.
"""
if node.nullrev in revs:
msg = _("cannot %s null changeset") % (action)
hint = _("no changeset checked out")
raise error.Abort(msg, hint=hint)
publicrevs = repo.revs('%ld and public()', revs)
if len(repo[None].parents()) > 1:
raise error.Abort(_("cannot %s while merging") % action)
if publicrevs:
msg = _("cannot %s public changesets") % (action)
hint = _("see 'hg help phases' for details")
raise error.Abort(msg, hint=hint)
newunstable = disallowednewunstable(repo, revs)
if newunstable:
raise error.Abort(_("cannot %s changeset with children") % action)
def disallowednewunstable(repo, revs):
"""Checks whether editing the revs will create new unstable changesets and
are we allowed to create them.
To allow new unstable changesets, set the config:
`experimental.evolution.allowunstable=True`
"""
allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt)
if allowunstable:
return revset.baseset()
return repo.revs("(%ld::) - %ld", revs, revs)