Added new preferences subsection

In the preferences section the following optional subsection
can be configured:

   <rpm-locale-filtering>true|false</rpm-locale-filtering>

If set to true the default locales POSIX, C, and C.UTF-8 are
applied as rpm install_lang macro. If the locale section is
configured in addition the list is extended by that information
too
This commit is contained in:
Marcus Schäfer 2019-02-08 16:56:56 +01:00
parent fad1c0f1ef
commit f8265bb607
No known key found for this signature in database
GPG Key ID: AD11DD02B44996EF
8 changed files with 128 additions and 6 deletions

View File

@ -364,6 +364,27 @@ div { # locale
}
}
#==========================================
# common element <rpm-locale-filtering>
#
div {
k.rpm-locale-filtering.content = xsd:boolean
k.rpm-locale-filtering.attlist = empty
k.rpm-locale-filtering =
# locale-filtering sets the install_lang macro for rpm based
# installations to the configured locale list. This results
# in language specific files to become filtered out by rpm
# if they don't match the configured list. Please note it
# depends on the package design if the install_lang macro
# contents apply to the package or not.
element rpm-locale-filtering {
k.rpm-locale-filtering.attlist,
k.rpm-locale-filtering.content
}
}
#==========================================
# common element <namedCollection>
#
@ -2638,6 +2659,7 @@ div {
k.keytable? &
k.locale? &
k.packagemanager? &
k.rpm-locale-filtering? &
k.rpm-check-signatures? &
k.rpm-excludedocs? &
k.showlicense* &

View File

@ -609,6 +609,33 @@ specifies the where to find the boot kernel</a:documentation>
</element>
</define>
</div>
<!--
==========================================
common element <rpm-locale-filtering>
-->
<div>
<define name="k.rpm-locale-filtering.content">
<data type="boolean"/>
</define>
<define name="k.rpm-locale-filtering.attlist">
<empty/>
</define>
<define name="k.rpm-locale-filtering">
<!--
locale-filtering sets the install_lang macro for rpm based
installations to the configured locale list. This results
in language specific files to become filtered out by rpm
if they don't match the configured list. Please note it
depends on the package design if the install_lang macro
contents apply to the package or not.
-->
<element name="rpm-locale-filtering">
<ref name="k.rpm-locale-filtering.attlist"/>
<ref name="k.rpm-locale-filtering.content"/>
</element>
</define>
</div>
<!--
==========================================
common element <namedCollection>
@ -4165,6 +4192,9 @@ definition</a:documentation>
<optional>
<ref name="k.packagemanager"/>
</optional>
<optional>
<ref name="k.rpm-locale-filtering"/>
</optional>
<optional>
<ref name="k.rpm-check-signatures"/>
</optional>

View File

@ -99,14 +99,14 @@ class SystemPrepare(object):
repository_sections = \
self.xml_state.get_repository_sections_used_for_build()
package_manager = self.xml_state.get_package_manager()
locale_list = self.xml_state.get_locale()
rpm_locale_list = self.xml_state.get_rpm_locale()
if self.xml_state.get_rpm_check_signatures():
repository_options.append('check_signatures')
if self.xml_state.get_rpm_excludedocs():
repository_options.append('exclude_docs')
if locale_list:
if rpm_locale_list:
repository_options.append(
'_install_langs%{0}'.format(':'.join(locale_list))
'_install_langs%{0}'.format(':'.join(rpm_locale_list))
)
repo = Repository(
self.root_bind, package_manager, repository_options

View File

@ -7239,7 +7239,7 @@ class preferences(GeneratedsSuper):
sections based on profiles combine to create on vaild definition"""
subclass = None
superclass = None
def __init__(self, profiles=None, bootsplash_theme=None, bootloader_theme=None, keytable=None, locale=None, packagemanager=None, rpm_check_signatures=None, rpm_excludedocs=None, showlicense=None, timezone=None, type_=None, version=None):
def __init__(self, profiles=None, bootsplash_theme=None, bootloader_theme=None, keytable=None, locale=None, packagemanager=None, rpm_locale_filtering=None, rpm_check_signatures=None, rpm_excludedocs=None, showlicense=None, timezone=None, type_=None, version=None):
self.original_tagname_ = None
self.profiles = _cast(None, profiles)
if bootsplash_theme is None:
@ -7262,6 +7262,10 @@ class preferences(GeneratedsSuper):
self.packagemanager = []
else:
self.packagemanager = packagemanager
if rpm_locale_filtering is None:
self.rpm_locale_filtering = []
else:
self.rpm_locale_filtering = rpm_locale_filtering
if rpm_check_signatures is None:
self.rpm_check_signatures = []
else:
@ -7322,6 +7326,11 @@ class preferences(GeneratedsSuper):
def add_packagemanager(self, value): self.packagemanager.append(value)
def insert_packagemanager_at(self, index, value): self.packagemanager.insert(index, value)
def replace_packagemanager_at(self, index, value): self.packagemanager[index] = value
def get_rpm_locale_filtering(self): return self.rpm_locale_filtering
def set_rpm_locale_filtering(self, rpm_locale_filtering): self.rpm_locale_filtering = rpm_locale_filtering
def add_rpm_locale_filtering(self, value): self.rpm_locale_filtering.append(value)
def insert_rpm_locale_filtering_at(self, index, value): self.rpm_locale_filtering.insert(index, value)
def replace_rpm_locale_filtering_at(self, index, value): self.rpm_locale_filtering[index] = value
def get_rpm_check_signatures(self): return self.rpm_check_signatures
def set_rpm_check_signatures(self, rpm_check_signatures): self.rpm_check_signatures = rpm_check_signatures
def add_rpm_check_signatures(self, value): self.rpm_check_signatures.append(value)
@ -7361,6 +7370,7 @@ class preferences(GeneratedsSuper):
self.keytable or
self.locale or
self.packagemanager or
self.rpm_locale_filtering or
self.rpm_check_signatures or
self.rpm_excludedocs or
self.showlicense or
@ -7416,6 +7426,9 @@ class preferences(GeneratedsSuper):
for packagemanager_ in self.packagemanager:
showIndent(outfile, level, pretty_print)
outfile.write('<packagemanager>%s</packagemanager>%s' % (self.gds_encode(self.gds_format_string(quote_xml(packagemanager_), input_name='packagemanager')), eol_))
for rpm_locale_filtering_ in self.rpm_locale_filtering:
showIndent(outfile, level, pretty_print)
outfile.write('<rpm-locale-filtering>%s</rpm-locale-filtering>%s' % (self.gds_format_boolean(rpm_locale_filtering_, input_name='rpm-locale-filtering'), eol_))
for rpm_check_signatures_ in self.rpm_check_signatures:
showIndent(outfile, level, pretty_print)
outfile.write('<rpm-check-signatures>%s</rpm-check-signatures>%s' % (self.gds_format_boolean(rpm_check_signatures_, input_name='rpm-check-signatures'), eol_))
@ -7474,6 +7487,16 @@ class preferences(GeneratedsSuper):
packagemanager_ = ""
packagemanager_ = self.gds_validate_string(packagemanager_, node, 'packagemanager')
self.packagemanager.append(packagemanager_)
elif nodeName_ == 'rpm-locale-filtering':
sval_ = child_.text
if sval_ in ('true', '1'):
ival_ = True
elif sval_ in ('false', '0'):
ival_ = False
else:
raise_parse_error(child_, 'requires boolean')
ival_ = self.gds_validate_boolean(ival_, node, 'rpm_locale_filtering')
self.rpm_locale_filtering.append(ival_)
elif nodeName_ == 'rpm-check-signatures':
sval_ = child_.text
if sval_ in ('true', '1'):

View File

@ -139,6 +139,41 @@ class XMLState(object):
if locale_section:
return locale_section[0].split(',')
def get_rpm_locale(self):
"""
Gets list of locale names to filter out by rpm
if rpm-locale-filtering is switched on the
the list always contains: [POSIX, C, C.UTF-8]
and is extended by the optionaly configured
locale
:return: List of names or None
:rtype: list|None
"""
if self.get_rpm_locale_filtering():
rpm_locale = ['POSIX', 'C', 'C.UTF-8']
configured_locale = self.get_locale()
if configured_locale:
for locale in configured_locale:
rpm_locale.append(locale)
return rpm_locale
def get_rpm_locale_filtering(self):
"""
Gets the rpm-locale-filtering configuration flag. Returns
False if not present.
:return: True or False
:rtype: bool
"""
for preferences in self.get_preferences_sections():
locale_filtering = preferences.get_rpm_locale_filtering()
if locale_filtering:
return locale_filtering[0]
return False
def get_rpm_excludedocs(self):
"""
Gets the rpm-excludedocs configuration flag. Returns

View File

@ -37,6 +37,7 @@
</profiles>
<preferences>
<locale>en_US,de_DE</locale>
<rpm-locale-filtering>true</rpm-locale-filtering>
</preferences>
<preferences>
<type bootloader="grub2" image="oem" primary="true" boot="oemboot/example-distribution" firmware="efi" kernelcmdline="splash" vga="0x303" editbootconfig="my_edit_boot_script" editbootinstall="/absolute/path/to/my_edit_boot_install" fsmountoptions="async" btrfs_root_is_snapshot="true" spare_part="200M" xen_server="true" formatoptions="force_size,super=man" filesystem="ext4">

View File

@ -182,8 +182,10 @@ class TestSystemPrepare(object):
)
mock_repo.assert_called_once_with(
self.system.root_bind, 'package-manager-name',
['check_signatures', 'exclude_docs', '_install_langs%en_US:de_DE']
self.system.root_bind, 'package-manager-name', [
'check_signatures', 'exclude_docs',
'_install_langs%POSIX:C:C.UTF-8:en_US:de_DE'
]
)
# mock local repos will be translated and bind mounted
assert uri.translate.call_args_list == [

View File

@ -737,5 +737,14 @@ class TestXMLState(object):
state = XMLState(xml_data, [], 'oem')
assert state.get_initrd_system() == 'kiwi'
def test_get_rpm_locale_filtering(self):
assert self.state.get_rpm_locale_filtering() is True
assert self.boot_state.get_rpm_locale_filtering() is False
def test_get_locale(self):
assert self.state.get_locale() == ['en_US', 'de_DE']
def test_get_rpm_locale(self):
assert self.state.get_rpm_locale() == [
'POSIX', 'C', 'C.UTF-8', 'en_US', 'de_DE'
]