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.