Fix the check_repo to takes care of shadow RQ.

This commit is contained in:
Alberto Planas 2014-08-19 10:22:32 +02:00
parent 6740403295
commit 0537cd1003
5 changed files with 38 additions and 22 deletions

View File

@ -56,10 +56,10 @@ def _check_repo_download(self, request):
repo = goodrepo[1]
# we can assume x86_64 is there
todownload = [ToDownload(request.src_project, repo, 'x86_64',
todownload = [ToDownload(request.shadow_src_project, repo, 'x86_64',
fn[0], fn[3]) for fn in
self.checkrepo.get_package_list_from_repository(
request.src_project, repo, 'x86_64',
request.shadow_src_project, repo, 'x86_64',
request.src_package)]
self.checkrepo._download(request, todownload)

View File

@ -22,6 +22,9 @@ from osc.core import makeurl
# from osc.core import show_upstream_rev_vrev
from osc import cmdln
# Expand sys.path to search modules inside the pluging directory
_plugin_dir = os.path.expanduser('~/.osc-plugins')
sys.path.append(_plugin_dir)
from osclib.stagingapi import StagingAPI
@ -209,8 +212,8 @@ def _checker_one_request(self, rq, opts):
# force=True,
# rev=_rev, vrev=_vrev)
act = FakeAction(pkg, prj, tprj, tpkg, rev)
self.api.submit_to_prj(act, fake_devel_prj)
act = FakeAction(prj, pkg, tprj, tpkg, rev)
self.api.submit_to_prj(act, fake_devel_prj, force_enable_build=True)
self._checker_accept_request(opts, id_, 'The request is linked to %s' % fake_devel_prj, diff=0)
continue

View File

@ -41,6 +41,7 @@ class Request(object):
src_package=None, tgt_project=None, tgt_package=None,
revision=None, srcmd5=None, verifymd5=None,
group=None, goodrepos=None, missings=None,
is_shadow=None, shadow_src_project=None,
element=None):
self.request_id = request_id
@ -54,6 +55,8 @@ class Request(object):
self.group = group
self.goodrepos = goodrepos if goodrepos else []
self.missings = missings if missings else []
self.is_shadow = is_shadow
self.shadow_src_project = shadow_src_project
self.updated = False
self.error = None
@ -66,14 +69,6 @@ class Request(object):
if element:
self.load(element)
# Detect if the request comes from Factory to a openSUSE
# release, and adjust the source and target projects
_is_product = re.match(r'openSUSE:\d{2}.\d', self.tgt_project)
if self.src_project == 'openSUSE:Factory' and _is_product:
self.is_shadow_devel = True
self.org_src_project, self.src_project = self.src_project, '%s:Devel' % self.tgt_project
self.org_src_package, self.src_package = self.src_package, self.tgt_package
def load(self, element):
"""Load a node from a ElementTree request XML element."""
self.request_id = int(element.get('id'))
@ -97,9 +92,19 @@ class Request(object):
self.goodrepos = []
self.missings = []
# Detect if the request comes from Factory to a openSUSE
# release, and adjust the source and target projects
_is_product = re.match(r'openSUSE:\d{2}.\d', self.tgt_project)
if self.src_project == 'openSUSE:Factory' and _is_product:
self.is_shadow_devel = True
self.shadow_src_project = '%s:Devel' % self.tgt_project
else:
self.is_shadow_devel = False
self.shadow_src_project = self.src_project
def str_compact(self):
return '#[%s](%s)%s' % (self.request_id, self.src_package,
' Shadow' if self.is_shadow_devel else '')
(' Shadow via %s' % self.shadow_src_project) if self.is_shadow_devel else '')
def __repr__(self):
return '#[%s] %s/%s -> %s/%s%s' % (self.request_id,
@ -107,7 +112,7 @@ class Request(object):
self.src_package,
self.tgt_project,
self.tgt_package,
' Shadow' if self.is_shadow_devel else '')
(' Shadow via %s' % self.shadow_src_project) if self.is_shadow_devel else '')
class CheckRepo(object):
@ -469,7 +474,10 @@ class CheckRepo(object):
revision=None,
srcmd5=rq.srcmd5,
verifymd5=rq.verifymd5,
group=rq.group)
group=rq.group,
is_shadow=rq.is_shadow,
org_src_project=rq.org_src_project,
org_src_package=rq.org_src_package)
requests.append(sp)
return requests
@ -482,7 +490,7 @@ class CheckRepo(object):
"""
repos_to_check = []
root_xml = self.last_build_success(request.src_project,
root_xml = self.last_build_success(request.shadow_src_project,
request.tgt_project,
request.src_package,
request.verifymd5)

View File

@ -267,7 +267,7 @@ class CycleDetector(object):
else:
_prj, _repo = rq.goodrepos[0]
goodrepos[rq] = _repo
all_packages = [self._get_builddepinfo(rq.src_project, goodrepos[rq], arch, rq.src_package)
all_packages = [self._get_builddepinfo(rq.shadow_src_project, goodrepos[rq], arch, rq.src_package)
for rq in requests if not rq.updated]
all_packages = [pkg for pkg in all_packages if pkg]

View File

@ -683,11 +683,13 @@ class StagingAPI(object):
return tar_pkg
def submit_to_prj(self, act, project):
def submit_to_prj(self, act, project, force_enable_build=False):
"""
Links sources from request to project
:param act: action for submit request
:param project: project to link into
:param force_enable_build: overwrite the ring criteria to enable
or disable the build
"""
src_prj = act.src_project
@ -696,6 +698,9 @@ class StagingAPI(object):
tar_pkg = act.tgt_package
disable_build = False
# The force_enable_build will avoid the
# map_ring_package_to_subproject
if not force_enable_build:
if not self.ring_packages.get(tar_pkg):
disable_build = True
else: