view tests/test_urls.py @ 1467:53e306a6086b

maps: implement sqlite revmap This patch adds the SqliteRevMap, which has a same interface with RevMap but is backed by a sqlite database. It uses database indexes to accelerate all kinds of queries and disables iteration to prevent slow code being written in the future. In practise, it should be faster on large repos with millions of svn revisions but slower on small repos due to the overhead introduced.
author Jun Wu <quark@fb.com>
date Wed, 15 Jun 2016 18:23:07 +0100
parents d890d8d4e168
children 7917abf6b456
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.ui.ui()
        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)