view tests/test_urls.py @ 1548:7f83be82d03f

revset: fix ordering issue of "svnrev()" This is subtle. See https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-August/103368.html for the context. Basically, `subset & x` (instead of `x & subset`) should be used to make order correct given the current revset API.
author Jun Wu <quark@fb.com>
date Tue, 19 Dec 2017 14:19:00 -0800
parents 7917abf6b456
children
line wrap: on
line source

import test_util

import unittest
import urllib

from hgsubversion.svnwrap import parse_url
from hgsubversion import svnrepo

class TestSubversionUrls(test_util.TestBase):
    def test_standard_url(self):
        self.check_parse_url((None, None, 'file:///var/svn/repo'),
                             ('file:///var/svn/repo', ))

    def test_user_url(self):
        self.check_parse_url(
            ('joe', None, 'https://svn.testurl.com/repo'),
            ('https://joe@svn.testurl.com/repo', ))
        self.check_parse_url(
            ('bob', None, 'https://svn.testurl.com/repo'),
            ('https://joe@svn.testurl.com/repo', 'bob', ))

    def test_password_url(self):
        self.check_parse_url(
            (None, 't3stpw', 'svn+ssh://svn.testurl.com/repo'),
            ('svn+ssh://:t3stpw@svn.testurl.com/repo', ))
        self.check_parse_url(
            (None, '123abc', 'svn+ssh://svn.testurl.com/repo'),
            ('svn+ssh://:t3stpw@svn.testurl.com/repo', None, '123abc', ))

    def test_svnssh_preserve_user(self):
        self.check_parse_url(
            ('user', 't3stpw', 'svn+ssh://user@svn.testurl.com/repo',),
            ('svn+ssh://user:t3stpw@svn.testurl.com/repo', ))
        self.check_parse_url(
            ('bob', '123abc', 'svn+ssh://bob@svn.testurl.com/repo',),
            ('svn+ssh://user:t3stpw@svn.testurl.com/repo', 'bob', '123abc', ))
        self.check_parse_url(
            ('user2', None, 'svn+ssh://user2@svn.testurl.com/repo',),
            ('svn+ssh://user2@svn.testurl.com/repo', ))
        self.check_parse_url(
            ('bob', None, 'svn+ssh://bob@svn.testurl.com/repo',),
            ('svn+ssh://user2@svn.testurl.com/repo', 'bob', ))

    def test_user_password_url(self):
        self.check_parse_url(
            ('joe', 't3stpw', 'https://svn.testurl.com/repo'),
            ('https://joe:t3stpw@svn.testurl.com/repo', ))
        self.check_parse_url(
            ('bob', '123abc', 'https://svn.testurl.com/repo'),
            ('https://joe:t3stpw@svn.testurl.com/repo', 'bob', '123abc', ))

    def test_url_rewriting(self):
        ui = test_util.testui()
        ui.setconfig('hgsubversion', 'username', 'bob')
        repo = svnrepo.svnremoterepo(ui, 'svn+ssh://joe@foo/bar')
        self.assertEqual('svn+ssh://bob@foo/bar', repo.svnauth[0])
        self.assertEqual('svn+ssh://bob@foo/bar', repo.svnurl)

        repo = svnrepo.svnremoterepo(ui, 'svn+http://joe@foo/bar')
        self.assertEqual(('http://foo/bar', 'bob', None), repo.svnauth)
        self.assertEqual('http://foo/bar', repo.svnurl)

        repo = svnrepo.svnremoterepo(ui, 'svn+https://joe@foo/bar')
        self.assertEqual(('https://foo/bar', 'bob', None), repo.svnauth)
        self.assertEqual('https://foo/bar', repo.svnurl)

    def test_quoting(self):
        ui = self.ui()
        repo_path = self.load_svndump('non_ascii_path_1.svndump')

        repo_url = test_util.fileurl(repo_path)
        subdir = '/b\xC3\xB8b'
        quoted_subdir = urllib.quote(subdir)

        repo1 = svnrepo.svnremoterepo(ui, repo_url + subdir)
        repo2 = svnrepo.svnremoterepo(ui, repo_url + quoted_subdir)
        self.assertEqual(repo1.svnurl, repo2.svnurl)

    def check_parse_url(self, expected, args):
        self.assertEqual(expected, parse_url(*args))
        if len(args) == 1:
            repo = svnrepo.svnremoterepo(self.ui(), path=args[0])
            self.assertEqual(expected[2], repo.svnauth[0])
            self.assertEqual(expected[2], repo.svnurl)