You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lorax/SOURCES/0002-Fix-replace-command-ut...

52 lines
1.4 KiB

From de825e84964d0145c46d77433cb08ee8c4640843 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <evgeniy.zamriy@softline.com>
Date: Wed, 26 Jul 2023 22:45:32 +0300
Subject: [PATCH 2/3] Fix replace command utf8 handling
This change allows using non-latin UTF-8 symbols in files modified
from Lorax templates using the "replace" command.
Note: fileinput.input doesn't support encoding argument in the
in-place mode, so we replaced it with StringIO.
---
src/pylorax/sysutils.py | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/pylorax/sysutils.py b/src/pylorax/sysutils.py
index 35f8b0f..81dc20a 100644
--- a/src/pylorax/sysutils.py
+++ b/src/pylorax/sysutils.py
@@ -25,7 +25,7 @@ __all__ = ["joinpaths", "touch", "replace", "chown_", "chmod_", "remove",
import sys
import os
import re
-import fileinput
+import io
import pwd
import grp
import glob
@@ -50,14 +50,13 @@ def touch(fname):
def replace(fname, find, sub):
- fin = fileinput.input(fname, inplace=1)
pattern = re.compile(find)
-
- for line in fin:
- line = pattern.sub(sub, line)
- sys.stdout.write(line)
-
- fin.close()
+ with open(fname, "r", encoding="utf-8") as fd:
+ fin = io.StringIO(fd.read())
+ with open(fname, "w", encoding="utf-8") as fd:
+ for line in fin:
+ line = pattern.sub(sub, line)
+ fd.write(line)
def chown_(path, user=None, group=None, recursive=False):
--
2.40.1