Fixed building destination path on forking repository

Also fixed handling 'path' argument for centos repositories

Change-Id: I3292e64d47e0ea58a44d3ce625649d4bb934f3c6
Closes-Bug: 1547820
This commit is contained in:
Bulat Gaifullin 2016-02-20 13:20:14 +03:00
parent e0059a7af3
commit c0f04443b5
4 changed files with 15 additions and 5 deletions

View File

@ -95,7 +95,9 @@ class RepositoryController(object):
"""
new_path = os.path.join(
destination,
repository.path or utils.get_path_from_url(repository.url, False)
repository.path or
# the cut first '/', because otherwise path.join uses it as is
utils.get_path_from_url(repository.url, False)[1:]
)
logger.info("cloning repository '%s' to '%s'", repository, new_path)
return self.driver.fork_repository(

View File

@ -105,6 +105,7 @@ class RpmRepositoryDriver(RepositoryDriverBase):
name=repository_data['name'],
url=utils.normalize_repository_url(repository_data["uri"]),
architecture=arch,
path=repository_data.get('path'),
origin=""
))
@ -201,6 +202,7 @@ class RpmRepositoryDriver(RepositoryDriverBase):
name=repository_data['name'],
url=utils.normalize_repository_url(repository_data["uri"]),
architecture=arch,
path=repository_data.get('path'),
origin=repository_data.get('origin')
)
utils.ensure_dir_exist(utils.get_path_from_url(repository.url))

View File

@ -87,7 +87,7 @@ class TestRepositoryController(base.TestCase):
@mock.patch("packetary.controllers.repository.os")
def test_fork_repository(self, os):
os.path.join.side_effect = lambda *args: "".join(args)
os.path.join.side_effect = lambda *args: "/".join(args)
repo = gen_repository(name="test1", url="file:///test")
clone = copy.copy(repo)
clone.url = "/root/repo"
@ -98,7 +98,7 @@ class TestRepositoryController(base.TestCase):
self.context.connection, repo, "./repo/test", False, False
)
repo.path = "os"
self.ctrl.fork_repository(repo, "./repo/", False, False)
self.ctrl.fork_repository(repo, "./repo", False, False)
self.driver.fork_repository.assert_called_with(
self.context.connection, repo, "./repo/os", False, False
)

View File

@ -69,7 +69,10 @@ class TestRpmDriver(base.TestCase):
def test_get_repository(self):
repos = []
repo_data = {"name": "os", "uri": "http://host/centos/os/x86_64/"}
repo_data = {
"name": "os", "uri": "http://host/centos/os/x86_64/",
"path": "centos"
}
self.driver.get_repository(
self.connection,
repo_data,
@ -83,6 +86,7 @@ class TestRpmDriver(base.TestCase):
self.assertEqual("", repo.origin)
self.assertEqual("x86_64", repo.architecture)
self.assertEqual("http://host/centos/os/x86_64/", repo.url)
self.assertEqual("centos", repo.path)
def test_get_packages(self):
streams = []
@ -221,7 +225,8 @@ class TestRpmDriver(base.TestCase):
@mock.patch("packetary.drivers.rpm_driver.utils.ensure_dir_exist")
def test_create_repository(self, ensure_dir_exists_mock):
repository_data = {
"name": "Test", "uri": "file:///repo/os/x86_64", "origin": "Test"
"name": "Test", "uri": "file:///repo/os/x86_64", "origin": "Test",
"path": "centos"
}
repo = self.driver.create_repository(repository_data, "x86_64")
ensure_dir_exists_mock.assert_called_once_with("/repo/os/x86_64/")
@ -229,6 +234,7 @@ class TestRpmDriver(base.TestCase):
self.assertEqual("x86_64", repo.architecture)
self.assertEqual(repository_data["uri"] + "/", repo.url)
self.assertEqual(repository_data["origin"], repo.origin)
self.assertEqual(repository_data["path"], repo.path)
@mock.patch("packetary.drivers.rpm_driver.utils")
def test_load_package_from_file(self, utils):