|
|
# RhodeCode VCSServer provides access to different vcs backends via network.
|
|
|
# Copyright (C) 2014-2020 RhodeCode GmbH
|
|
|
#
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
|
# (at your option) any later version.
|
|
|
#
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
# GNU General Public License for more details.
|
|
|
#
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
"""
|
|
|
Mercurial libs compatibility
|
|
|
"""
|
|
|
|
|
|
import mercurial
|
|
|
from mercurial import demandimport
|
|
|
|
|
|
# patch demandimport, due to bug in mercurial when it always triggers
|
|
|
# demandimport.enable()
|
|
|
from vcsserver.str_utils import safe_bytes
|
|
|
|
|
|
demandimport.enable = lambda *args, **kwargs: 1
|
|
|
|
|
|
from mercurial import ui
|
|
|
from mercurial import patch
|
|
|
from mercurial import config
|
|
|
from mercurial import extensions
|
|
|
from mercurial import scmutil
|
|
|
from mercurial import archival
|
|
|
from mercurial import discovery
|
|
|
from mercurial import unionrepo
|
|
|
from mercurial import localrepo
|
|
|
from mercurial import merge as hg_merge
|
|
|
from mercurial import subrepo
|
|
|
from mercurial import subrepoutil
|
|
|
from mercurial import tags as hg_tag
|
|
|
from mercurial import util as hgutil
|
|
|
from mercurial.commands import clone, pull
|
|
|
from mercurial.node import nullid
|
|
|
from mercurial.context import memctx, memfilectx
|
|
|
from mercurial.error import (
|
|
|
LookupError, RepoError, RepoLookupError, Abort, InterventionRequired,
|
|
|
RequirementError, ProgrammingError)
|
|
|
from mercurial.hgweb import hgweb_mod
|
|
|
from mercurial.localrepo import instance
|
|
|
from mercurial.match import match, alwaysmatcher, patternmatcher
|
|
|
from mercurial.mdiff import diffopts
|
|
|
from mercurial.node import bin, hex
|
|
|
from mercurial.encoding import tolocal
|
|
|
from mercurial.discovery import findcommonoutgoing
|
|
|
from mercurial.hg import peer
|
|
|
from mercurial.httppeer import makepeer
|
|
|
from mercurial.utils.urlutil import url as hg_url
|
|
|
from mercurial.scmutil import revrange, revsymbol
|
|
|
from mercurial.node import nullrev
|
|
|
from mercurial import exchange
|
|
|
from hgext import largefiles
|
|
|
|
|
|
# those authnadlers are patched for python 2.6.5 bug an
|
|
|
# infinit looping when given invalid resources
|
|
|
from mercurial.url import httpbasicauthhandler, httpdigestauthhandler
|
|
|
|
|
|
# hg strip is in core now
|
|
|
from mercurial import strip as hgext_strip
|
|
|
|
|
|
|
|
|
def get_ctx(repo, ref):
|
|
|
if not isinstance(ref, int):
|
|
|
ref = safe_bytes(ref)
|
|
|
try:
|
|
|
ctx = repo[ref]
|
|
|
except (ProgrammingError, TypeError):
|
|
|
# we're unable to find the rev using a regular lookup, we fallback
|
|
|
# to slower, but backward compat revsymbol usage
|
|
|
ctx = revsymbol(repo, ref)
|
|
|
except (LookupError, RepoLookupError):
|
|
|
# Similar case as above but only for refs that are not numeric
|
|
|
if isinstance(ref, int):
|
|
|
raise
|
|
|
ctx = revsymbol(repo, ref)
|
|
|
return ctx
|
|
|
|