skippkg-finder: add conditionals support for the product ftp-tree
In some cases we would not like to add package to ftp-tree on an specific arch, this can be done by multiple 'group' to be defined in NON_FTP_PACKAGES.group, however NON_FTP_PACKAGES.group is auto-generated by skippkg-finder according the buildresults and the project attributes, this commit will add conditionals support to skippkg-finder, in other words, to be able to define arch dependent package in NON_FTP_PACKAGES.group via the project attribute. To enable it, 'use group' is also needed to be existsed in the product file, the available condition/platform can be found in meta pacakge.
This commit is contained in:
parent
9980d015de
commit
c86d23e05e
@ -44,6 +44,8 @@ class SkippkgFinder(object):
|
|||||||
self.skiplist_supplement_regex = set(config.get('skippkg-finder-skiplist-supplement-regex', '').split(' '))
|
self.skiplist_supplement_regex = set(config.get('skippkg-finder-skiplist-supplement-regex', '').split(' '))
|
||||||
# drops off RPM from a list of the supplement RPMs due to regex
|
# drops off RPM from a list of the supplement RPMs due to regex
|
||||||
self.skiplist_supplement_ignores = set(config.get('skippkg-finder-skiplist-supplement-ignores', '').split(' '))
|
self.skiplist_supplement_ignores = set(config.get('skippkg-finder-skiplist-supplement-ignores', '').split(' '))
|
||||||
|
# conditional support scenario
|
||||||
|
self.skiplist_conditionals = set(config.get('skippkg-finder-conditional-scenarios', '').split(' '))
|
||||||
|
|
||||||
def is_sle_specific(self, package):
|
def is_sle_specific(self, package):
|
||||||
"""
|
"""
|
||||||
@ -244,6 +246,20 @@ class SkippkgFinder(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def create_group(self, group, conditional, packages=[]):
|
||||||
|
if not (group and conditional):
|
||||||
|
return ''
|
||||||
|
group_tree = ET.Element('group', {'name': group})
|
||||||
|
ET.SubElement(group_tree, 'conditional', {'name': conditional})
|
||||||
|
packagelist = ET.SubElement(group_tree, 'packagelist', {'relationship': 'requires'})
|
||||||
|
for pkg in sorted(packages):
|
||||||
|
if not self.print_only and self.verbose:
|
||||||
|
print(pkg)
|
||||||
|
attr = {'name': pkg}
|
||||||
|
ET.SubElement(packagelist, 'package', attr)
|
||||||
|
|
||||||
|
return ET.tostring(group_tree, pretty_print=True, encoding='unicode')
|
||||||
|
|
||||||
def crawl(self):
|
def crawl(self):
|
||||||
"""Main method"""
|
"""Main method"""
|
||||||
|
|
||||||
@ -325,21 +341,26 @@ class SkippkgFinder(object):
|
|||||||
binary not in self.skiplist_supplement_ignores:
|
binary not in self.skiplist_supplement_ignores:
|
||||||
obsoleted.append(binary)
|
obsoleted.append(binary)
|
||||||
|
|
||||||
skip_list = ET.Element('group', {'name': 'NON_FTP_PACKAGES'})
|
skip_list = self.create_group('NON_FTP_PACKAGES', 'drop_from_ftp', obsoleted)
|
||||||
ET.SubElement(skip_list, 'conditional', {'name': 'drop_from_ftp'})
|
|
||||||
packagelist = ET.SubElement(skip_list, 'packagelist', {'relationship': 'requires'})
|
# Handle the conditionals
|
||||||
for pkg in sorted(obsoleted):
|
cond_list = {}
|
||||||
if not self.print_only and self.verbose:
|
for item in self.skiplist_conditionals:
|
||||||
print(pkg)
|
# node[0] is the condition, node[1] is the package
|
||||||
attr = {'name': pkg}
|
# an example of the format: only_x86_64:glibc-32bit
|
||||||
ET.SubElement(packagelist, 'package', attr)
|
node = item.split(':')
|
||||||
|
if node[0] not in cond_list:
|
||||||
|
cond_list[node[0]] = []
|
||||||
|
cond_list[node[0]].append(node[1])
|
||||||
|
for cond in cond_list.keys():
|
||||||
|
group = self.create_group('NON_FTP_PACKAGES_' + cond, cond, cond_list[cond])
|
||||||
|
skip_list += group
|
||||||
|
|
||||||
if not self.print_only:
|
if not self.print_only:
|
||||||
source_file_ensure(self.apiurl, self.upload_project, META_PACKAGE, 'NON_FTP_PACKAGES.group',
|
source_file_ensure(self.apiurl, self.upload_project, META_PACKAGE, 'NON_FTP_PACKAGES.group',
|
||||||
ET.tostring(skip_list, pretty_print=True, encoding='unicode'),
|
skip_list, 'Update the skip list')
|
||||||
'Update the skip list')
|
|
||||||
else:
|
else:
|
||||||
print(ET.tostring(skip_list, pretty_print=True,
|
print(skip_list)
|
||||||
encoding='unicode'))
|
|
||||||
|
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user