Fix and test repository_path_expand on SLE12-SP5
The way OBS collapses repositories is different to what we did
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from collections import namedtuple
|
||||
from collections import OrderedDict
|
||||
from datetime import datetime
|
||||
from dateutil.parser import parse as date_parse
|
||||
import re
|
||||
@@ -351,28 +352,31 @@ def attribute_value_save(apiurl, project, name, value, namespace='OSRT'):
|
||||
http_POST(url, data=ET.tostring(root))
|
||||
|
||||
@memoize(session=True)
|
||||
def repository_path_expand(apiurl, project, repo, repos=None):
|
||||
def _repository_path_expand(apiurl, project, repo, repos):
|
||||
"""Recursively list underlying projects."""
|
||||
|
||||
if repos is None:
|
||||
# Avoids screwy behavior where list as default shares reference for all
|
||||
# calls which effectively means the list grows even when new project.
|
||||
repos = []
|
||||
# only the last repo for a project is remembered by OBS
|
||||
if project in repos:
|
||||
del repos[project]
|
||||
|
||||
if [project, repo] in repos:
|
||||
# For some reason devel projects such as graphics include the same path
|
||||
# twice for openSUSE:Factory/snapshot. Does not hurt anything, but
|
||||
# cleaner not to include it twice.
|
||||
return repos
|
||||
|
||||
repos.append([project, repo])
|
||||
repos[project] = repo
|
||||
|
||||
meta = ET.fromstringlist(show_project_meta(apiurl, project))
|
||||
for path in meta.findall('.//repository[@name="{}"]/path'.format(repo)):
|
||||
repository_path_expand(apiurl, path.get('project', project), path.get('repository'), repos)
|
||||
_repository_path_expand(apiurl, path.get('project', project), path.get('repository'), repos)
|
||||
|
||||
return repos
|
||||
|
||||
@memoize(session=True)
|
||||
def repository_path_expand(apiurl, project, repo):
|
||||
"""Recursively list underlying projects."""
|
||||
repodict = OrderedDict()
|
||||
_repository_path_expand(apiurl, project, repo, repodict)
|
||||
repos = []
|
||||
for project, repo in repodict.items():
|
||||
repos.append([project, repo])
|
||||
return repos
|
||||
|
||||
@memoize(session=True)
|
||||
def repository_path_search(apiurl, project, search_project, search_repository):
|
||||
queue = []
|
||||
|
@@ -342,13 +342,15 @@ class Project(object):
|
||||
|
||||
for link in project_links:
|
||||
ET.SubElement(root, 'link', { 'project': link })
|
||||
|
||||
url = osc.core.make_meta_url('prj', self.name, APIURL)
|
||||
osc.core.http_PUT(url, data=ET.tostring(root))
|
||||
self.custom_meta(ET.tostring(root))
|
||||
|
||||
def add_package(self, package):
|
||||
self.packages.append(package)
|
||||
|
||||
def custom_meta(self, meta):
|
||||
url = osc.core.make_meta_url('prj', self.name, APIURL)
|
||||
osc.core.http_PUT(url, data=meta)
|
||||
|
||||
def remove(self):
|
||||
if not self.name:
|
||||
return
|
||||
@@ -356,7 +358,7 @@ class Project(object):
|
||||
for package in self.packages:
|
||||
package.remove()
|
||||
|
||||
url = osc.core.makeurl(APIURL, ['source', self.name])
|
||||
url = osc.core.makeurl(APIURL, ['source', self.name], {'force': 1})
|
||||
try:
|
||||
osc.core.http_DELETE(url)
|
||||
except HTTPError:
|
||||
|
12
tests/fixtures/repository/SUSE:SLE-12-SP1:GA.xml
vendored
Normal file
12
tests/fixtures/repository/SUSE:SLE-12-SP1:GA.xml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<project name="SUSE:SLE-12-SP1:GA">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12:Update"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12:Update" repository="snapshot-SP1"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
30
tests/fixtures/repository/SUSE:SLE-12-SP1:Update.xml
vendored
Normal file
30
tests/fixtures/repository/SUSE:SLE-12-SP1:Update.xml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
<project name="SUSE:SLE-12-SP1:Update" kind="maintenance_release">
|
||||
<title>SLE 12 SP1 Updates</title>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP1:GA" vrevmode="extend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP1:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12:Update" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP5">
|
||||
<path project="SUSE:SLE-12-SP1:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP4">
|
||||
<path project="SUSE:SLE-12-SP1:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12:Update" repository="snapshot-SP4"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP3">
|
||||
<path project="SUSE:SLE-12-SP1:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12:Update" repository="snapshot-SP3"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP2">
|
||||
<path project="SUSE:SLE-12-SP1:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12:Update" repository="snapshot-SP2"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
12
tests/fixtures/repository/SUSE:SLE-12-SP2:GA.xml
vendored
Normal file
12
tests/fixtures/repository/SUSE:SLE-12-SP2:GA.xml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<project name="SUSE:SLE-12-SP2:GA">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP1:Update" vrevmode="unextend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP1:Update" repository="snapshot-SP2"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
25
tests/fixtures/repository/SUSE:SLE-12-SP2:Update.xml
vendored
Normal file
25
tests/fixtures/repository/SUSE:SLE-12-SP2:Update.xml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<project name="SUSE:SLE-12-SP2:Update" kind="maintenance_release">
|
||||
<title>SLE 12 SP2 Updates</title>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP2:GA" vrevmode="extend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP2:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP1:Update" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP5">
|
||||
<path project="SUSE:SLE-12-SP2:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP1:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP4">
|
||||
<path project="SUSE:SLE-12-SP2:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP1:Update" repository="snapshot-SP4"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP3">
|
||||
<path project="SUSE:SLE-12-SP2:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP1:Update" repository="snapshot-SP3"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
12
tests/fixtures/repository/SUSE:SLE-12-SP3:GA.xml
vendored
Normal file
12
tests/fixtures/repository/SUSE:SLE-12-SP3:GA.xml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<project name="SUSE:SLE-12-SP3:GA">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP2:Update" vrevmode="unextend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP2:Update" repository="snapshot-SP3"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
20
tests/fixtures/repository/SUSE:SLE-12-SP3:Update.xml
vendored
Normal file
20
tests/fixtures/repository/SUSE:SLE-12-SP3:Update.xml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<project name="SUSE:SLE-12-SP3:Update" kind="maintenance_release">
|
||||
<title>SLE 12 SP3 Updates</title>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP3:GA" vrevmode="extend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP3:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP2:Update" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP5">
|
||||
<path project="SUSE:SLE-12-SP3:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP2:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP4">
|
||||
<path project="SUSE:SLE-12-SP3:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP2:Update" repository="snapshot-SP4"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
12
tests/fixtures/repository/SUSE:SLE-12-SP4:GA.xml
vendored
Normal file
12
tests/fixtures/repository/SUSE:SLE-12-SP4:GA.xml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<project name="SUSE:SLE-12-SP4:GA">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP3:Update" vrevmode="unextend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP3:Update" repository="snapshot-SP4"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
15
tests/fixtures/repository/SUSE:SLE-12-SP4:Update.xml
vendored
Normal file
15
tests/fixtures/repository/SUSE:SLE-12-SP4:Update.xml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<project name="SUSE:SLE-12-SP4:Update" kind="maintenance_release">
|
||||
<title>SLE 12 SP4 Updates</title>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP4:GA" vrevmode="extend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP4:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP3:Update" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP5">
|
||||
<path project="SUSE:SLE-12-SP4:GA" repository="standard"/>
|
||||
<path project="SUSE:SLE-12-SP3:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
12
tests/fixtures/repository/SUSE:SLE-12-SP5:GA.xml
vendored
Normal file
12
tests/fixtures/repository/SUSE:SLE-12-SP5:GA.xml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<project name="SUSE:SLE-12-SP5:GA">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP4:Update" vrevmode="unextend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12-SP4:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
10
tests/fixtures/repository/SUSE:SLE-12-SP5:GA:Staging:A.xml
vendored
Normal file
10
tests/fixtures/repository/SUSE:SLE-12-SP5:GA:Staging:A.xml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<project name="SUSE:SLE-12-SP5:GA:Staging:A">
|
||||
<title/>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12-SP5:GA"/>
|
||||
<repository name="standard" linkedbuild="all">
|
||||
<path project="SUSE:SLE-12-SP5:GA" repository="ports"/>
|
||||
<path project="SUSE:SLE-12-SP4:Update" repository="snapshot-SP5"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
11
tests/fixtures/repository/SUSE:SLE-12:GA.xml
vendored
Normal file
11
tests/fixtures/repository/SUSE:SLE-12:GA.xml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<project name="SUSE:SLE-12:GA">
|
||||
<title>Code 12 SP0 GA platform</title>
|
||||
<description>The SLE-12 GA Sources.</description>
|
||||
<repository name="standard">
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="ports">
|
||||
<arch>armv7l</arch>
|
||||
</repository>
|
||||
</project>
|
||||
|
30
tests/fixtures/repository/SUSE:SLE-12:Update.xml
vendored
Normal file
30
tests/fixtures/repository/SUSE:SLE-12:Update.xml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
<project name="SUSE:SLE-12:Update" kind="maintenance_release">
|
||||
<title>SLE 12 SP0 Updates</title>
|
||||
<description/>
|
||||
<link project="SUSE:SLE-12:GA" vrevmode="extend"/>
|
||||
<repository name="standard">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP5">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP4">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP3">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP2">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
<repository name="snapshot-SP1">
|
||||
<path project="SUSE:SLE-12:GA" repository="standard"/>
|
||||
<arch>x86_64</arch>
|
||||
</repository>
|
||||
</project>
|
||||
|
@@ -1,2 +1,6 @@
|
||||
[global]
|
||||
[general]
|
||||
apiurl = http://api:3000
|
||||
|
||||
[http://api:3000]
|
||||
user=Admin
|
||||
pass=opensuse
|
||||
|
64
tests/repository_tests.py
Normal file
64
tests/repository_tests.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import unittest
|
||||
import os
|
||||
import os.path
|
||||
from osclib.core import repository_path_expand
|
||||
|
||||
from . import OBSLocal
|
||||
|
||||
FIXTURES = os.path.join(os.getcwd(), 'tests/fixtures/repository')
|
||||
|
||||
class TestRepository(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestRepository, self).setUp()
|
||||
self.wf = OBSLocal.StagingWorkflow()
|
||||
|
||||
def tearDown(self):
|
||||
del self.wf
|
||||
super(TestRepository, self).tearDown()
|
||||
|
||||
def add_project(self, name):
|
||||
prj = self.wf.create_project(name)
|
||||
with open(os.path.join(FIXTURES, name + '.xml')) as f:
|
||||
prj.custom_meta(f.read())
|
||||
|
||||
def test_sp5_setup(self):
|
||||
self.add_project('SUSE:SLE-12:GA')
|
||||
self.add_project('SUSE:SLE-12:Update')
|
||||
self.add_project('SUSE:SLE-12-SP1:GA')
|
||||
self.add_project('SUSE:SLE-12-SP1:Update')
|
||||
self.add_project('SUSE:SLE-12-SP2:GA')
|
||||
self.add_project('SUSE:SLE-12-SP2:Update')
|
||||
self.add_project('SUSE:SLE-12-SP3:GA')
|
||||
self.add_project('SUSE:SLE-12-SP3:Update')
|
||||
self.add_project('SUSE:SLE-12-SP4:GA')
|
||||
self.add_project('SUSE:SLE-12-SP4:Update')
|
||||
self.add_project('SUSE:SLE-12-SP5:GA')
|
||||
self.add_project('SUSE:SLE-12-SP5:GA:Staging:A')
|
||||
|
||||
repos = repository_path_expand(self.wf.api.apiurl, 'SUSE:SLE-12-SP5:GA', 'standard')
|
||||
self.assertEqual([['SUSE:SLE-12-SP5:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP4:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP4:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP3:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP3:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP2:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP2:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP1:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP1:GA', 'standard'],
|
||||
['SUSE:SLE-12:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12:GA', 'standard']], repos)
|
||||
|
||||
repos = repository_path_expand(self.wf.api.apiurl, 'SUSE:SLE-12-SP5:GA:Staging:A', 'standard')
|
||||
self.assertEqual([['SUSE:SLE-12-SP5:GA:Staging:A', 'standard'],
|
||||
['SUSE:SLE-12-SP5:GA', 'ports'],
|
||||
['SUSE:SLE-12-SP4:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP4:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP3:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP3:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP2:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP2:GA', 'standard'],
|
||||
['SUSE:SLE-12-SP1:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12-SP1:GA', 'standard'],
|
||||
['SUSE:SLE-12:Update', 'snapshot-SP5'],
|
||||
['SUSE:SLE-12:GA', 'standard']], repos)
|
@@ -19,6 +19,7 @@ from . import OBSLocal
|
||||
class TestSelect(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestSelect, self).setUp()
|
||||
self.wf = OBSLocal.StagingWorkflow()
|
||||
|
||||
def tearDown(self):
|
||||
|
Reference in New Issue
Block a user