##// END OF EJS Templates
hgweb: allow viewing diffs against p1 or p2 for merge commits (issue3904)...
hgweb: allow viewing diffs against p1 or p2 for merge commits (issue3904) This adds UI portion of the feature that has resided in mercurial since 2012. Back then the interface was added together with the code, but was shortly backed out because it was deemed "not ready". Code, however, stayed. For the original feature and its implementation, see issue2810 and d605a82cf189. In short, the backed-out interface had two outstanding issues: 1. it was introducing an entirely new term (baseline) and 2. it was present on every changeset's page, even for changesets with 1 parent (or no parents), which didn't make sense This patch implements a hopefully better interface because: 1. it uses the usual terms (diff) and 2. it only shows up when there actually are 2 parents.

File last commit:

r17481:b555be7c default
r23740:9e1f4c65 default
Show More
transport.py
128 lines | 5.0 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/>.
Daniel Holth
convert extension: stripped-down svn transport module
r4764
Thomas Arendsen Hein
convert: add missing import of util, needed for svn < 1.6
r15345 from mercurial import util
Daniel Holth
convert extension: stripped-down svn transport module
r4764 from svn.core import SubversionException, Pool
import svn.ra
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
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()
svn_config = svn.core.svn_config_get_config(None)
def _create_auth_baton(pool):
"""Create a Subversion authentication baton. """
import svn.client
# 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),
]
timeless@mozdev.org
spelling: dependent
r17481 # Platform-dependent authentication methods
Patrick Mezard
convert/svn: support more OS specific auth providers via svn 1.6 API
r8120 getprovider = getattr(svn.core, 'svn_auth_get_platform_specific_provider',
None)
if getprovider:
# Available in svn >= 1.6
for name in ('gnome_keyring', 'keychain', 'kwallet', 'windows'):
for type in ('simple', 'ssl_client_cert_pw', 'ssl_server_trust'):
p = getprovider(name, type, pool)
if p:
providers.append(p)
else:
Augie Fackler
hgext: replace uses of hasattr with util.safehasattr
r14945 if util.safehasattr(svn.client, '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)
class NotBranchError(SubversionException):
pass
class SvnRaTransport(object):
"""
Open an ra connection to a Subversion repository.
"""
def __init__(self, url="", ra=None):
self.pool = Pool()
self.svn_url = url
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 self.username = ''
self.password = ''
Daniel Holth
convert extension: stripped-down svn transport module
r4764
# Only Subversion 1.4 has reparent()
Augie Fackler
hgext: replace uses of hasattr with util.safehasattr
r14945 if ra is None or not util.safehasattr(svn.ra, '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)
if False:
svn.core.svn_auth_set_parameter(
ab, svn.core.SVN_AUTH_PARAM_DEFAULT_USERNAME, self.username)
svn.core.svn_auth_set_parameter(
ab, svn.core.SVN_AUTH_PARAM_DEFAULT_PASSWORD, self.password)
self.client.auth_baton = ab
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(
Patrick Mezard
convert/svn: fix URL quoting issue with svn 1.7...
r15599 self.svn_url,
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 self.client, self.pool)
Thomas Arendsen Hein
Replace _ with inst for catching exceptions to not shadow gettext....
r5140 except SubversionException, (inst, num):
Bryan O'Sullivan
convert/subversion: get converter working against plain HTTP.
r4938 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):
svn.ra.reporter2_invoke_set_path(self._reporter, self._baton,
path, revnum, start_empty, lock_token, pool)
def delete_path(self, path, pool=None):
svn.ra.reporter2_invoke_delete_path(self._reporter, self._baton,
path, pool)
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)
def finish_report(self, pool=None):
svn.ra.reporter2_invoke_finish_report(self._reporter,
self._baton, pool)
def abort_report(self, pool=None):
svn.ra.reporter2_invoke_abort_report(self._reporter,
self._baton, pool)
def do_update(self, revnum, path, *args, **kwargs):
Matt Mackall
many, many trivial check-code fixups
r10282 return self.Reporter(svn.ra.do_update(self.ra, revnum, path,
*args, **kwargs))