##// END OF EJS Templates
hgext: start building a library for simple hooks...
hgext: start building a library for simple hooks Many workflows depend on hooks to enforce certain policies, e.g. to prevent forced pushes. The Mercurial Guide includes some cases and Google can help finding others, but it can save users a lot of time if hg itself has a couple of examples for further customization. Differential Revision: https://phab.mercurial-scm.org/D6825

File last commit:

r43359:c59eb156 default
r44897:4cabeea6 default
Show More
transport.py
158 lines | 5.2 KiB | text/x-python | PythonLexer
Daniel Holth
convert extension: stripped-down svn transport module
r4764 # -*- coding: utf-8 -*-
# Copyright (C) 2007 Daniel Holth <dholth@fastmail.fm>
# This is a stripped-down version of the original bzr-svn transport.py,
# Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
# 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 2 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
Martin Geisler
Remove FSF mailing address from GPL headers...
r15782 # along with this program; if not, see <http://www.gnu.org/licenses/>.
timeless
convert: transport use absolute_import
r28412 from __future__ import absolute_import
Daniel Holth
convert extension: stripped-down svn transport module
r4764
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 import svn.client
Daniel Holth
convert extension: stripped-down svn transport module
r4764 import svn.core
timeless
convert: transport use absolute_import
r28412 import svn.ra
Pool = svn.core.Pool
SubversionException = svn.core.SubversionException
Daniel Holth
convert extension: stripped-down svn transport module
r4764
Gregory Szorc
py3: manually import getattr where it is needed...
r43359 from mercurial.pycompat import getattr
Augie Fackler
formatting: blacken the codebase...
r43346 from mercurial import util
FUJIWARA Katsunori
convert: fix "stdlib import follows local import" problem in transport...
r28461
Thomas Arendsen Hein
removed trailing whitespace
r4957 # Some older versions of the Python bindings need to be
Daniel Holth
convert extension: stripped-down svn transport module
r4764 # explicitly initialized. But what we want to do probably
# won't work worth a darn against those libraries anyway!
svn.ra.initialize()
Durham Goode
convert: move svn config initializer out of the module level...
r29668 svn_config = None
Daniel Holth
convert extension: stripped-down svn transport module
r4764
Augie Fackler
formatting: blacken the codebase...
r43346
Daniel Holth
convert extension: stripped-down svn transport module
r4764 def _create_auth_baton(pool):
"""Create a Subversion authentication baton. """
import svn.client
Augie Fackler
formatting: blacken the codebase...
r43346
Daniel Holth
convert extension: stripped-down svn transport module
r4764 # Give the client context baton a suite of authentication
# providers.h
providers = [
svn.client.get_simple_provider(pool),
svn.client.get_username_provider(pool),
svn.client.get_ssl_client_cert_file_provider(pool),
svn.client.get_ssl_client_cert_pw_file_provider(pool),
svn.client.get_ssl_server_trust_file_provider(pool),
Augie Fackler
formatting: blacken the codebase...
r43346 ]
timeless@mozdev.org
spelling: dependent
r17481 # Platform-dependent authentication methods
Augie Fackler
formatting: blacken the codebase...
r43346 getprovider = getattr(
svn.core, 'svn_auth_get_platform_specific_provider', None
)
Patrick Mezard
convert/svn: support more OS specific auth providers via svn 1.6 API
r8120 if getprovider:
# Available in svn >= 1.6
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 for name in (b'gnome_keyring', b'keychain', b'kwallet', b'windows'):
for type in (b'simple', b'ssl_client_cert_pw', b'ssl_server_trust'):
Patrick Mezard
convert/svn: support more OS specific auth providers via svn 1.6 API
r8120 p = getprovider(name, type, pool)
if p:
providers.append(p)
else:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if util.safehasattr(svn.client, b'get_windows_simple_provider'):
Patrick Mezard
convert/svn: support more OS specific auth providers via svn 1.6 API
r8120 providers.append(svn.client.get_windows_simple_provider(pool))
Patrick Mezard
convert: support windows SVN simple auth provider
r5126
Daniel Holth
convert extension: stripped-down svn transport module
r4764 return svn.core.svn_auth_open(providers, pool)
Augie Fackler
formatting: blacken the codebase...
r43346
Daniel Holth
convert extension: stripped-down svn transport module
r4764 class NotBranchError(SubversionException):
pass
Augie Fackler
formatting: blacken the codebase...
r43346
Daniel Holth
convert extension: stripped-down svn transport module
r4764 class SvnRaTransport(object):
"""
Open an ra connection to a Subversion repository.
"""
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 def __init__(self, url=b"", ra=None):
Daniel Holth
convert extension: stripped-down svn transport module
r4764 self.pool = Pool()
self.svn_url = url
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.username = b''
self.password = b''
Daniel Holth
convert extension: stripped-down svn transport module
r4764
# Only Subversion 1.4 has reparent()
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if ra is None or not util.safehasattr(svn.ra, b'reparent'):
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 self.client = svn.client.create_context(self.pool)
ab = _create_auth_baton(self.pool)
self.client.auth_baton = ab
Durham Goode
convert: move svn config initializer out of the module level...
r29668 global svn_config
if svn_config is None:
svn_config = svn.core.svn_config_get_config(None)
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 self.client.config = svn_config
Daniel Holth
convert extension: stripped-down svn transport module
r4764 try:
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 self.ra = svn.client.open_ra_session(
Augie Fackler
formatting: blacken the codebase...
r43346 self.svn_url, self.client, self.pool
)
Gregory Szorc
global: mass rewrite to use modern exception syntax...
r25660 except SubversionException as xxx_todo_changeme:
(inst, num) = xxx_todo_changeme.args
Augie Fackler
formatting: blacken the codebase...
r43346 if num in (
svn.core.SVN_ERR_RA_ILLEGAL_URL,
svn.core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,
svn.core.SVN_ERR_BAD_URL,
):
Daniel Holth
convert extension: stripped-down svn transport module
r4764 raise NotBranchError(url)
raise
else:
self.ra = ra
svn.ra.reparent(self.ra, self.svn_url.encode('utf8'))
Benoit Boissinot
use new style classes
r8778 class Reporter(object):
Renato Cunha
convert: tuple parameter unpacking is deprecated in py3k
r11498 def __init__(self, reporter_data):
self._reporter, self._baton = reporter_data
Daniel Holth
convert extension: stripped-down svn transport module
r4764
def set_path(self, path, revnum, start_empty, lock_token, pool=None):
Augie Fackler
formatting: blacken the codebase...
r43346 svn.ra.reporter2_invoke_set_path(
self._reporter,
self._baton,
path,
revnum,
start_empty,
lock_token,
pool,
)
Daniel Holth
convert extension: stripped-down svn transport module
r4764
def delete_path(self, path, pool=None):
Augie Fackler
formatting: blacken the codebase...
r43346 svn.ra.reporter2_invoke_delete_path(
self._reporter, self._baton, path, pool
)
Daniel Holth
convert extension: stripped-down svn transport module
r4764
Augie Fackler
formatting: blacken the codebase...
r43346 def link_path(
self, path, url, revision, start_empty, lock_token, pool=None
):
svn.ra.reporter2_invoke_link_path(
self._reporter,
self._baton,
path,
url,
revision,
start_empty,
lock_token,
pool,
)
Daniel Holth
convert extension: stripped-down svn transport module
r4764
def finish_report(self, pool=None):
Augie Fackler
formatting: blacken the codebase...
r43346 svn.ra.reporter2_invoke_finish_report(
self._reporter, self._baton, pool
)
Daniel Holth
convert extension: stripped-down svn transport module
r4764
def abort_report(self, pool=None):
Augie Fackler
formatting: blacken the codebase...
r43346 svn.ra.reporter2_invoke_abort_report(
self._reporter, self._baton, pool
)
Daniel Holth
convert extension: stripped-down svn transport module
r4764
def do_update(self, revnum, path, *args, **kwargs):
Augie Fackler
formatting: blacken the codebase...
r43346 return self.Reporter(
svn.ra.do_update(self.ra, revnum, path, *args, **kwargs)
)