view hgsubversion/layouts/__init__.py @ 1602:6a6ce9d9da35 default tip

compathacks: make memfilectx construction compatible with hg5.0 'copied' in memfilectx was renamed to 'copysource' in 550a172a603b9ed in core mercurial.
author Pulkit Goyal <pulkit@yandex-team.ru>
date Fri, 19 Apr 2019 16:28:39 +0300
parents cff81f35b31e
children
line wrap: on
line source

"""Code for dealing with subversion layouts

This package is intended to encapsulate everything about subversion
layouts.  This includes detecting the layout based on looking at
subversion, mapping subversion paths to hg branches, and doing any
other path translation necessary.

NB: this has a long way to go before it does everything it claims to

"""

from mercurial import error as hgerror
from mercurial import util as hgutil

import custom
import single
import standard

__all__ = [
    "layout_from_name",
    ]

# This is the authoritative store of what layouts are available.
# The intention is for extension authors who wish to build their own
# layout to add it to this dict.
NAME_TO_CLASS = {
    "custom": custom.CustomLayout,
    "single": single.SingleLayout,
    "standard": standard.StandardLayout,
}


def layout_from_name(name, meta):
    """Returns a layout module given the layout name

    You should be able to read the layout name from meta.layout but, if
    necessary, you can use one of the meta.layout_from_* functions to get the
    name to pass to this function.

    """

    if name not in NAME_TO_CLASS:
        raise hgerror.Abort('Unknown hgsubversion layout: %s' % name)
    return NAME_TO_CLASS[name](meta)