Fixing double insertion of encoding in locale.gen/locale.conf (#1421)

* A temporary fix for #1200, in the long run we need something like what was mentioned in the issue comments: https://github.com/archlinux/archinstall/issues/1200#issuecomment-1212754806

* Enabled the use of modifier detection and getting it in right

* Mistaken a split

* Adding less strict decoding of output log, this in order to handle the more correct locale generation introduced in this PR.
This commit is contained in:
Anton Hvornum 2022-08-12 22:36:06 +02:00 committed by GitHub
parent 7b4940ef6d
commit b1ab5ba372
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View File

@ -444,7 +444,7 @@ class SysCommand:
def __repr__(self, *args :List[Any], **kwargs :Dict[str, Any]) -> str:
if self.session:
return self.session._trace_log.decode('UTF-8')
return self.session._trace_log.decode('UTF-8', errors='backslashreplace')
return ''
def __json__(self) -> Dict[str, Union[str, bool, List[str], Dict[str, Any], Optional[bool], Optional[Dict[str, Any]]]]:

View File

@ -443,10 +443,27 @@ class Installer:
if not len(locale):
return True
modifier = ''
# This is a temporary patch to fix #1200
if '.' in locale:
locale, potential_encoding = locale.split('.', 1)
# Override encoding if encoding is set to the default parameter
# and the "found" encoding differs.
if encoding == 'UTF-8' and encoding != potential_encoding:
encoding = potential_encoding
# Make sure we extract the modifier, that way we can put it in if needed.
if '@' in locale:
locale, modifier = locale.split('@', 1)
modifier = f"@{modifier}"
# - End patch
with open(f'{self.target}/etc/locale.gen', 'a') as fh:
fh.write(f'{locale}.{encoding} {encoding}\n')
fh.write(f'{locale}.{encoding}{modifier} {encoding}\n')
with open(f'{self.target}/etc/locale.conf', 'w') as fh:
fh.write(f'LANG={locale}.{encoding}\n')
fh.write(f'LANG={locale}.{encoding}{modifier}\n')
return True if SysCommand(f'/usr/bin/arch-chroot {self.target} locale-gen').exit_code == 0 else False