Skip to content

Fix artifact splitting regressions

Created by: rdale

The recent change in the artifact splitting regular expression matching code doesn't work. For example, the splitting rules for the syslinux chunk have a pattern to match files in /usr/share/syslinux/com32* and add them to the syslinux-devel component. The split rules and default rules for that chunk look like this:

split rules: [{'include': ['(usr/)?share/syslinux/com32.*'], 'artifact': 'syslinux-devel'}]

default rules: [{'include': ['(usr/)?s?bin/.'], 'artifact': '-bins'}, {'include': ['(usr/)?lib(32|64)?/lib[^/]\.so(\.\d+)', '(usr/)libexec/.'], 'artifact': '-libs'},

{'include': ['(usr/)?include/.', '(usr/)?lib(32|64)?/lib.\.a', '(usr/)?lib(32|64)?/lib.\.la', '(usr/)?(lib(32|64)?|share)/pkgconfig/.\.pc'], 'artifact': '-devel'},

{'include': ['(usr/)?share/doc/.', '(usr/)?share/man/.', '(usr/)?share/info/.*'], ' artifact': '-doc'},

{'include': ['(usr/)?share/locale/.', '(usr/)?share/i18n/.', '(usr/)?share/zoneinfo/.*'], 'artifact': '-locale'},

{'include': ['.*'], 'artifact': '-misc'}]

The OrderDict code in splitting.compile_rules() drops the /usr/share/syslinux/com32* pattern:

rules = OrderedDict((component['name'] + a if a.startswith('-') else a, re.compile('^(?:%s)$' % '|'.join(r))) for a, r in match_rules.iteritems())

If a key for an artifact, such as 'syslinux-devel', already exists in the OrderedDict it is just overwritten and lost when the next 'syslinux-devel' entry is added.

The fix is to revert to using an array of artifact name/regular expression pairs as before.

Merge request reports