Merge pull request #28 from miska/master
Included check and better move
This commit is contained in:
commit
0065b8ad6f
@ -434,7 +434,7 @@ def do_staging(self, subcmd, opts, *args):
|
||||
self._staging_push(project, opts)
|
||||
elif cmd in ['check']:
|
||||
project = args[1]
|
||||
return self._staging_check(project, opts.everything, opts)
|
||||
return api.check_project_status(project)
|
||||
elif cmd in ['remove', 'r']:
|
||||
project = args[1]
|
||||
self._staging_remove(project, opts)
|
||||
|
@ -78,25 +78,24 @@ class StagingAPI(object):
|
||||
def move_between_project(self, source_project, package, destination_project):
|
||||
"""
|
||||
Move selected package from one staging to another
|
||||
:param source_project: Source project
|
||||
:param package: Source package
|
||||
:param destination_project: Destination project
|
||||
"""
|
||||
|
||||
# Get the relevant information from source
|
||||
package_info = self.get_package_information('source_project', 'package')
|
||||
# Get the relevant information about source
|
||||
meta = get_prj_pseudometa(source_project)
|
||||
req_id = -1
|
||||
for req in meta['requests']:
|
||||
if req['package'] == package:
|
||||
req_id = req['id']
|
||||
if req_id == -1:
|
||||
raise oscerr.WrongArgs("Couldn't find request for package {0} in project {1}".format(package,source_project))
|
||||
|
||||
# Copy the package
|
||||
#FIXME: add the data from orginal project yaml to the destination one
|
||||
link_pac(package_info['project'],
|
||||
package_info['package'],
|
||||
destination_project,
|
||||
package,
|
||||
force=True,
|
||||
rev=package_info['srcmd5'])
|
||||
|
||||
# Delete the first location
|
||||
message = 'moved to {0}'.format(destination_project)
|
||||
delete_package(self.apiurl, source_project, package, msg=message)
|
||||
#FIXME: delete the data from YAML
|
||||
|
||||
sr_to_prj(req_id, destination_project)
|
||||
# Delete the old one
|
||||
rm_from_prj(package, source_project, 'Moved to {0}'.format(destination_project))
|
||||
|
||||
def get_staging_projects(self):
|
||||
"""
|
||||
@ -289,6 +288,16 @@ class StagingAPI(object):
|
||||
self.set_prj_pseudometa(project, newdata)
|
||||
# FIXME Add sr to group request as well
|
||||
|
||||
def rm_from_prj(self, package, project, msg = None):
|
||||
"""
|
||||
Delete request from the project
|
||||
:param project: project to remove from
|
||||
:param package: package we want to remove
|
||||
:param msg: message for the log
|
||||
"""
|
||||
|
||||
_remove_rq_from_prj_pseudometa(project, package)
|
||||
delete_package(self.apiurl, project, package, force=True, msg=msg)
|
||||
|
||||
def create_package_container(self, project, package, disable_build = False):
|
||||
"""
|
||||
@ -307,6 +316,52 @@ class StagingAPI(object):
|
||||
url = makeurl(self.apiurl, ['source', project, package, '_meta'] )
|
||||
http_PUT(url, data=dst_meta)
|
||||
|
||||
def check_project_status(self, project):
|
||||
"""
|
||||
Checks whether everything is built in project
|
||||
:param project: project to check
|
||||
"""
|
||||
# Get build results
|
||||
query = {}
|
||||
query['lastbuild'] = 1
|
||||
u = makeurl(self.apiurl, ['build', project, '_result'], query=query)
|
||||
f = http_GET(u)
|
||||
root = ET.fromstring(''.join(f.readlines()))
|
||||
|
||||
# Check them
|
||||
broken = []
|
||||
working = []
|
||||
# Iterate through repositories
|
||||
for results in root.findall('result'):
|
||||
if results.get("state") not in [ "published", "unpublished" ]:
|
||||
working.append({"path": "{0}/{1}".format(results.get("repository"), results.get("arch")), "state": results.get("state")})
|
||||
# Iterate through packages
|
||||
for node in results:
|
||||
result = node.get("code")
|
||||
# Skip not built (yet)
|
||||
if result in [ "blocked", "building", "disabled" "excluded", "finished", "unknown", "unpublished", "published" ]:
|
||||
continue
|
||||
# Find broken
|
||||
if result in [ "broken", "failed", "unresolvable" ]:
|
||||
broken.append({"pkg": node.get("package"), "state" : result, "path" : "{0}/{1}".format(results.get("repository"),results.get("arch"))})
|
||||
|
||||
# Print the results
|
||||
if len(working) == 0 and len(broken) == 0:
|
||||
print "Everything is green!"
|
||||
else:
|
||||
if len(working) != 0:
|
||||
print "Following repositories are still building:"
|
||||
for i in working:
|
||||
print " {0}: {1}".format(i['path'], i['state'])
|
||||
print
|
||||
if len(broken) != 0:
|
||||
print "Following packages are broken:"
|
||||
for i in broken:
|
||||
print " {0} ({1}): {2}".format(i['pkg'], i['path'], i['state'])
|
||||
print
|
||||
print "Found errors in staging project {0}!".format(project)
|
||||
|
||||
|
||||
def rq_to_prj(self, request_id, project):
|
||||
"""
|
||||
Links request to project - delete or submit
|
||||
|
@ -236,6 +236,44 @@ class TestApiCalls(unittest.TestCase):
|
||||
self.assertEqual(httpretty.last_request().body, '<package name="wine"><title /><description /><build><disable /></build></package>')
|
||||
self.assertEqual(httpretty.last_request().path, '/source/openSUSE:Factory:Staging:B/wine/_meta')
|
||||
|
||||
@httpretty.activate
|
||||
def test_check_project_status_green(self):
|
||||
"""
|
||||
Test checking project status
|
||||
"""
|
||||
|
||||
# Initiate the pretty overrides
|
||||
self._register_pretty_url_get('http://localhost/build/green/_result?lastbuild=1',
|
||||
'build-results-green.xml')
|
||||
|
||||
# Initiate the api with mocked rings
|
||||
with mock_generate_ring_packages():
|
||||
api = oscs.StagingAPI('http://localhost')
|
||||
|
||||
# Check print output
|
||||
api.check_project_status("green")
|
||||
self.assertEqual(sys.stdout.getvalue().strip(), "Everything is green!")
|
||||
|
||||
@httpretty.activate
|
||||
def test_check_project_status_red(self):
|
||||
"""
|
||||
Test checking project status
|
||||
"""
|
||||
|
||||
# Initiate the pretty overrides
|
||||
self._register_pretty_url_get('http://localhost/build/red/_result?lastbuild=1',
|
||||
'build-results-red.xml')
|
||||
|
||||
# Initiate the api with mocked rings
|
||||
with mock_generate_ring_packages():
|
||||
api = oscs.StagingAPI('http://localhost')
|
||||
|
||||
# Check print output
|
||||
api.check_project_status("red")
|
||||
with open(self._get_fixtures_dir()+"/check_project_status_red.txt", "r") as f:
|
||||
data = f.read().strip()
|
||||
self.assertEqual(sys.stdout.getvalue().strip(), data)
|
||||
|
||||
|
||||
# Here place all mockable functions
|
||||
@contextlib.contextmanager
|
||||
|
40
tests/fixtures/build-results-green.xml
vendored
Normal file
40
tests/fixtures/build-results-green.xml
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
<resultlist state="c7856c90c70c53fae88aacec964b80c0">
|
||||
<result project="green" repository="standard" arch="x86_64" code="published" state="published">
|
||||
<status package="glibc" code="unknown" />
|
||||
<status package="kiwi-image-livecd-gnome.i586" code="unknown" />
|
||||
<status package="kiwi-image-livecd-gnome.x86_64" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-kde.i586" code="unknown" />
|
||||
<status package="kiwi-image-livecd-kde.x86_64" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-x11" code="succeeded" />
|
||||
<status package="openSUSE-images" code="succeeded" />
|
||||
<status package="openSUSE-release" code="unknown" />
|
||||
<status package="package-lists-gnome.i586" code="unknown" />
|
||||
<status package="package-lists-gnome.x86_64" code="succeeded" />
|
||||
<status package="package-lists-images.i586" code="unknown" />
|
||||
<status package="package-lists-images.x86_64" code="succeeded" />
|
||||
<status package="package-lists-kde.i586" code="unknown" />
|
||||
<status package="package-lists-kde.x86_64" code="succeeded" />
|
||||
<status package="package-lists-x11.i586" code="unknown" />
|
||||
<status package="package-lists-x11.x86_64" code="succeeded" />
|
||||
<status package="promo-dvd-parts" code="succeeded" />
|
||||
</result>
|
||||
<result project="green" repository="standard" arch="i586" code="unpublished" state="unpublished">
|
||||
<status package="glibc" code="unknown" />
|
||||
<status package="kiwi-image-livecd-gnome.i586" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-gnome.x86_64" code="unknown" />
|
||||
<status package="kiwi-image-livecd-kde.i586" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-kde.x86_64" code="unknown" />
|
||||
<status package="kiwi-image-livecd-x11" code="succeeded" />
|
||||
<status package="openSUSE-images" code="succeeded" />
|
||||
<status package="openSUSE-release" code="unknown" />
|
||||
<status package="package-lists-gnome.i586" code="succeeded" />
|
||||
<status package="package-lists-gnome.x86_64" code="unknown" />
|
||||
<status package="package-lists-images.i586" code="succeeded" />
|
||||
<status package="package-lists-images.x86_64" code="unknown" />
|
||||
<status package="package-lists-kde.i586" code="succeeded" />
|
||||
<status package="package-lists-kde.x86_64" code="unknown" />
|
||||
<status package="package-lists-x11.i586" code="succeeded" />
|
||||
<status package="package-lists-x11.x86_64" code="unknown" />
|
||||
<status package="promo-dvd-parts" code="succeeded" />
|
||||
</result>
|
||||
</resultlist>
|
40
tests/fixtures/build-results-red.xml
vendored
Normal file
40
tests/fixtures/build-results-red.xml
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
<resultlist state="c7856c90c70c53fae88aacec964b80c0">
|
||||
<result project="green" repository="standard" arch="x86_64" code="building" state="building">
|
||||
<status package="glibc" code="unknown" />
|
||||
<status package="kiwi-image-livecd-gnome.i586" code="unknown" />
|
||||
<status package="kiwi-image-livecd-gnome.x86_64" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-kde.i586" code="unknown" />
|
||||
<status package="kiwi-image-livecd-kde.x86_64" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-x11" code="succeeded" />
|
||||
<status package="openSUSE-images" code="succeeded" />
|
||||
<status package="openSUSE-release" code="unknown" />
|
||||
<status package="package-lists-gnome.i586" code="unknown" />
|
||||
<status package="package-lists-gnome.x86_64" code="succeeded" />
|
||||
<status package="package-lists-images.i586" code="unknown" />
|
||||
<status package="package-lists-images.x86_64" code="succeeded" />
|
||||
<status package="package-lists-kde.i586" code="unknown" />
|
||||
<status package="package-lists-kde.x86_64" code="succeeded" />
|
||||
<status package="package-lists-x11.i586" code="unknown" />
|
||||
<status package="package-lists-x11.x86_64" code="succeeded" />
|
||||
<status package="promo-dvd-parts" code="succeeded" />
|
||||
</result>
|
||||
<result project="green" repository="standard" arch="i586" code="unpublished" state="unpublished">
|
||||
<status package="glibc" code="broken" />
|
||||
<status package="kiwi-image-livecd-gnome.i586" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-gnome.x86_64" code="unknown" />
|
||||
<status package="kiwi-image-livecd-kde.i586" code="succeeded" />
|
||||
<status package="kiwi-image-livecd-kde.x86_64" code="unknown" />
|
||||
<status package="kiwi-image-livecd-x11" code="succeeded" />
|
||||
<status package="openSUSE-images" code="failed" />
|
||||
<status package="openSUSE-release" code="unknown" />
|
||||
<status package="package-lists-gnome.i586" code="succeeded" />
|
||||
<status package="package-lists-gnome.x86_64" code="unknown" />
|
||||
<status package="package-lists-images.i586" code="succeeded" />
|
||||
<status package="package-lists-images.x86_64" code="unknown" />
|
||||
<status package="package-lists-kde.i586" code="succeeded" />
|
||||
<status package="package-lists-kde.x86_64" code="unknown" />
|
||||
<status package="package-lists-x11.i586" code="succeeded" />
|
||||
<status package="package-lists-x11.x86_64" code="unknown" />
|
||||
<status package="promo-dvd-parts" code="succeeded" />
|
||||
</result>
|
||||
</resultlist>
|
8
tests/fixtures/check_project_status_red.txt
vendored
Normal file
8
tests/fixtures/check_project_status_red.txt
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
Following repositories are still building:
|
||||
standard/x86_64: building
|
||||
|
||||
Following packages are broken:
|
||||
glibc (standard/i586): broken
|
||||
openSUSE-images (standard/i586): failed
|
||||
|
||||
Found errors in staging project red!
|
Loading…
x
Reference in New Issue
Block a user