Work on accept command - not yet done
This commit is contained in:
parent
9235ab50db
commit
63ccac76d5
@ -1,10 +1,7 @@
|
||||
import re
|
||||
import time
|
||||
|
||||
try:
|
||||
from urllib.error import HTTPError
|
||||
except ImportError:
|
||||
#python 2.x
|
||||
from urllib2 import HTTPError
|
||||
from urllib.error import HTTPError
|
||||
|
||||
import warnings
|
||||
from xml.etree import cElementTree as ET
|
||||
@ -12,11 +9,13 @@ from xml.etree import cElementTree as ET
|
||||
from osc.core import change_request_state, show_package_meta, wipebinaries
|
||||
from osc.core import http_GET, http_PUT, http_DELETE, http_POST
|
||||
from osc.core import delete_package, search, set_devel_project
|
||||
from osc.core import Request
|
||||
from osc.util.helper import decode_it
|
||||
from osclib.core import attribute_value_save
|
||||
from osclib.core import attribute_value_load
|
||||
from osclib.core import source_file_load
|
||||
from osclib.core import source_file_save
|
||||
from osclib.request_finder import RequestFinder
|
||||
from datetime import date
|
||||
|
||||
|
||||
@ -64,7 +63,7 @@ class AcceptCommand(object):
|
||||
|
||||
def perform(self, project, force=False):
|
||||
"""Accept the staging project for review and submit to Factory /
|
||||
openSUSE 13.2 ...
|
||||
Leap ...
|
||||
|
||||
Then disable the build to disabled
|
||||
:param project: staging project we are working with
|
||||
@ -78,25 +77,32 @@ class AcceptCommand(object):
|
||||
if not force:
|
||||
return False
|
||||
|
||||
meta = self.api.get_prj_pseudometa(project)
|
||||
status = self.api.project_status(project)
|
||||
packages = []
|
||||
for req in meta['requests']:
|
||||
self.api.rm_from_prj(project, request_id=req['id'], msg='ready to accept')
|
||||
packages.append(req['package'])
|
||||
|
||||
oldspecs = self.api.get_filelist_for_package(pkgname=req['package'],
|
||||
project=self.api.project,
|
||||
extension='spec')
|
||||
print('Accepting staging review for {}'.format(req['package']))
|
||||
change_request_state(self.api.apiurl,
|
||||
str(req['id']),
|
||||
'accepted',
|
||||
message='Accept to %s' % self.api.project,
|
||||
force=force)
|
||||
self.create_new_links(self.api.project, req['package'], oldspecs)
|
||||
rf = RequestFinder(self.api)
|
||||
oldspecs = {}
|
||||
for req in status.findall('staged_requests/entry'):
|
||||
packages.append(req.get('package'))
|
||||
|
||||
print('Checking file list of {}'.format(req.get('package')))
|
||||
os = self.api.get_filelist_for_package(pkgname=req.get('package'),
|
||||
project=self.api.project,
|
||||
extension='spec')
|
||||
oldspecs[req.get('package')] = os
|
||||
#self.create_new_links(self.api.project, req['package'], oldspecs)
|
||||
|
||||
print(oldspecs)
|
||||
|
||||
u = self.api.makeurl(['staging', self.api.project, 'staging_projects', project, 'accept'])
|
||||
f = http_POST(u)
|
||||
|
||||
while True:
|
||||
print(self.api.project_status(project, reload=True).get('state'))
|
||||
time.sleep(1)
|
||||
|
||||
self.api.accept_status_comment(project, packages)
|
||||
self.api.staging_deactivate(project)
|
||||
self.api.accept_status_comment(project, packages)
|
||||
|
||||
return True
|
||||
|
||||
|
@ -36,14 +36,9 @@ class RequestFinder(object):
|
||||
self.api = api
|
||||
self.srs = {}
|
||||
|
||||
def find_request_id(self, request_id):
|
||||
"""
|
||||
Look up the request by ID to verify if it is correct
|
||||
:param request_id: ID of the added request
|
||||
"""
|
||||
|
||||
def load_request(self, request_id):
|
||||
if not _is_int(request_id):
|
||||
return False
|
||||
return None
|
||||
|
||||
url = makeurl(self.api.apiurl, ['request', str(request_id)])
|
||||
try:
|
||||
@ -56,6 +51,18 @@ class RequestFinder(object):
|
||||
if root.get('id', None) != str(request_id):
|
||||
return None
|
||||
|
||||
return root
|
||||
|
||||
def find_request_id(self, request_id):
|
||||
"""
|
||||
Look up the request by ID to verify if it is correct
|
||||
:param request_id: ID of the added request
|
||||
"""
|
||||
|
||||
root = self.load_request(request_id)
|
||||
if not root:
|
||||
return False
|
||||
|
||||
project = root.find('action').find('target').get('project')
|
||||
if (project != self.api.project and not project.startswith(self.api.cstaging)):
|
||||
msg = 'Request {} is not for {}, but for {}'
|
||||
|
@ -888,10 +888,14 @@ class StagingAPI(object):
|
||||
url = self.makeurl(['staging', self.project, 'staging_projects'])
|
||||
return ET.parse(self.retried_GET(url)).getroot()
|
||||
|
||||
def project_status(self, staging):
|
||||
def project_status(self, staging, reload=False):
|
||||
if not staging:
|
||||
raise oscerr.WrongArgs('No staging given')
|
||||
|
||||
if reload:
|
||||
url = self.makeurl(['staging', self.project, 'staging_projects', staging])
|
||||
return ET.parse(self.retried_GET(url)).getroot()
|
||||
|
||||
root = self.staging_status()
|
||||
staging = self.prj_from_short(staging)
|
||||
for project in root.findall('staging_project[@name="{}"]'.format(staging)):
|
||||
@ -900,15 +904,13 @@ class StagingAPI(object):
|
||||
|
||||
def check_project_status(self, project):
|
||||
"""
|
||||
Checks a staging project for acceptance. Use the JSON document
|
||||
for staging project to base the decision.
|
||||
Checks a staging project for acceptance.
|
||||
:param project: project to check
|
||||
:return true (ok)/false (empty prj) or list of strings with
|
||||
informations)
|
||||
|
||||
"""
|
||||
status = self.project_status(project)
|
||||
return status and status.get('overall_state') == 'acceptable'
|
||||
return self.project_status(project).get('state') == 'acceptable'
|
||||
|
||||
def project_status_build_percent(self, status):
|
||||
final, tobuild = self.project_status_build_sum(status)
|
||||
@ -942,7 +944,7 @@ class StagingAPI(object):
|
||||
|
||||
def project_status_final(self, status):
|
||||
"""Determine if staging project is both active and no longer pending."""
|
||||
return status['overall_state'] in ['acceptable', 'review', 'failed']
|
||||
return status.get('state') in ['acceptable', 'review', 'failed']
|
||||
|
||||
# we use a private function to mock it - httpretty is all or nothing
|
||||
def _fetch_project_meta(self, project):
|
||||
|
Loading…
x
Reference in New Issue
Block a user