annotate hgext/convert/transport.py @ 9622:9d1a480ca6ea

gendoc: fix synopsis The synopsis is used as an inline literal when generating the manpage. There should not be any whitespace on the inside of the quotation marks in inline literals. Commands with an empty synopsis (such as tags) produces ``tags `` as synopsis, which triggers a warning.
author Martin Geisler <mg@lazybytes.net>
date Tue, 20 Oct 2009 22:42:49 +0200
parents c5f36402daad
children 08a0f04b56bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
2
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
3 # Copyright (C) 2007 Daniel Holth <dholth@fastmail.fm>
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
4 # This is a stripped-down version of the original bzr-svn transport.py,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
5 # Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
6
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
7 # This program is free software; you can redistribute it and/or modify
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
8 # it under the terms of the GNU General Public License as published by
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
9 # the Free Software Foundation; either version 2 of the License, or
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
10 # (at your option) any later version.
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
11
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
15 # GNU General Public License for more details.
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
16
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
17 # You should have received a copy of the GNU General Public License
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
18 # along with this program; if not, write to the Free Software
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
20
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
21 from svn.core import SubversionException, Pool
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
22 import svn.ra
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
23 import svn.client
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
24 import svn.core
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
25
4957
cdd33a048289 removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4938
diff changeset
26 # Some older versions of the Python bindings need to be
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
27 # explicitly initialized. But what we want to do probably
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
28 # won't work worth a darn against those libraries anyway!
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
29 svn.ra.initialize()
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
30
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
31 svn_config = svn.core.svn_config_get_config(None)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
32
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
33
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
34 def _create_auth_baton(pool):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
35 """Create a Subversion authentication baton. """
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
36 import svn.client
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
37 # Give the client context baton a suite of authentication
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
38 # providers.h
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
39 providers = [
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
40 svn.client.get_simple_provider(pool),
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
41 svn.client.get_username_provider(pool),
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
42 svn.client.get_ssl_client_cert_file_provider(pool),
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
43 svn.client.get_ssl_client_cert_pw_file_provider(pool),
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
44 svn.client.get_ssl_server_trust_file_provider(pool),
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
45 ]
5126
117dab48ca99 convert: support windows SVN simple auth provider
Patrick Mezard <pmezard@gmail.com>
parents: 4957
diff changeset
46 # Platform-dependant authentication methods
8120
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
47 getprovider = getattr(svn.core, 'svn_auth_get_platform_specific_provider',
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
48 None)
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
49 if getprovider:
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
50 # Available in svn >= 1.6
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
51 for name in ('gnome_keyring', 'keychain', 'kwallet', 'windows'):
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
52 for type in ('simple', 'ssl_client_cert_pw', 'ssl_server_trust'):
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
53 p = getprovider(name, type, pool)
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
54 if p:
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
55 providers.append(p)
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
56 else:
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
57 if hasattr(svn.client, 'get_windows_simple_provider'):
2b36ed5c1911 convert/svn: support more OS specific auth providers via svn 1.6 API
Patrick Mezard <pmezard@gmail.com>
parents: 6215
diff changeset
58 providers.append(svn.client.get_windows_simple_provider(pool))
5126
117dab48ca99 convert: support windows SVN simple auth provider
Patrick Mezard <pmezard@gmail.com>
parents: 4957
diff changeset
59
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
60 return svn.core.svn_auth_open(providers, pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
61
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
62 class NotBranchError(SubversionException):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
63 pass
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
64
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
65 class SvnRaTransport(object):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
66 """
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
67 Open an ra connection to a Subversion repository.
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
68 """
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
69 def __init__(self, url="", ra=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
70 self.pool = Pool()
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
71 self.svn_url = url
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
72 self.username = ''
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
73 self.password = ''
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
74
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
75 # Only Subversion 1.4 has reparent()
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
76 if ra is None or not hasattr(svn.ra, 'reparent'):
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
77 self.client = svn.client.create_context(self.pool)
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
78 ab = _create_auth_baton(self.pool)
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
79 if False:
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
80 svn.core.svn_auth_set_parameter(
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
81 ab, svn.core.SVN_AUTH_PARAM_DEFAULT_USERNAME, self.username)
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
82 svn.core.svn_auth_set_parameter(
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
83 ab, svn.core.SVN_AUTH_PARAM_DEFAULT_PASSWORD, self.password)
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
84 self.client.auth_baton = ab
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
85 self.client.config = svn_config
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
86 try:
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
87 self.ra = svn.client.open_ra_session(
4957
cdd33a048289 removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4938
diff changeset
88 self.svn_url.encode('utf8'),
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
89 self.client, self.pool)
5140
792c1d979097 Replace _ with inst for catching exceptions to not shadow gettext.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5126
diff changeset
90 except SubversionException, (inst, num):
4938
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
91 if num in (svn.core.SVN_ERR_RA_ILLEGAL_URL,
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
92 svn.core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,
4db03fa58bd5 convert/subversion: get converter working against plain HTTP.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4764
diff changeset
93 svn.core.SVN_ERR_BAD_URL):
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
94 raise NotBranchError(url)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
95 raise
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
96 else:
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
97 self.ra = ra
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
98 svn.ra.reparent(self.ra, self.svn_url.encode('utf8'))
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
99
8778
c5f36402daad use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8120
diff changeset
100 class Reporter(object):
4764
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
101 def __init__(self, (reporter, report_baton)):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
102 self._reporter = reporter
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
103 self._baton = report_baton
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
104
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
105 def set_path(self, path, revnum, start_empty, lock_token, pool=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
106 svn.ra.reporter2_invoke_set_path(self._reporter, self._baton,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
107 path, revnum, start_empty, lock_token, pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
108
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
109 def delete_path(self, path, pool=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
110 svn.ra.reporter2_invoke_delete_path(self._reporter, self._baton,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
111 path, pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
112
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
113 def link_path(self, path, url, revision, start_empty, lock_token,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
114 pool=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
115 svn.ra.reporter2_invoke_link_path(self._reporter, self._baton,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
116 path, url, revision, start_empty, lock_token,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
117 pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
118
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
119 def finish_report(self, pool=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
120 svn.ra.reporter2_invoke_finish_report(self._reporter,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
121 self._baton, pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
122
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
123 def abort_report(self, pool=None):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
124 svn.ra.reporter2_invoke_abort_report(self._reporter,
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
125 self._baton, pool)
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
126
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
127 def do_update(self, revnum, path, *args, **kwargs):
6a16ef0d1c7c convert extension: stripped-down svn transport module
Daniel Holth <dholth@fastmail.fm>
parents:
diff changeset
128 return self.Reporter(svn.ra.do_update(self.ra, revnum, path, *args, **kwargs))