summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorSergey Kosukhin <sergey.kosukhin@mpimet.mpg.de>2022-11-17 04:06:28 +0100
committerGitHub <noreply@github.com>2022-11-16 20:06:28 -0700
commitcd8ec60ae9be79fc30a2823ef6321c1240f759c1 (patch)
tree15f9b599ac26eb2d108acf0b6bfc5fa74b10f5d2 /var
parentfe597dfb0c7fda725c01a149d31056a208f0f05b (diff)
downloadspack-cd8ec60ae9be79fc30a2823ef6321c1240f759c1.tar.gz
spack-cd8ec60ae9be79fc30a2823ef6321c1240f759c1.tar.bz2
spack-cd8ec60ae9be79fc30a2823ef6321c1240f759c1.tar.xz
spack-cd8ec60ae9be79fc30a2823ef6321c1240f759c1.zip
serialbox: update patch to handle UTF-8 conversion errors (#33317)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/serialbox/package.py2
-rw-r--r--var/spack/repos/builtin/packages/serialbox/ppser_py3.patch37
2 files changed, 32 insertions, 7 deletions
diff --git a/var/spack/repos/builtin/packages/serialbox/package.py b/var/spack/repos/builtin/packages/serialbox/package.py
index 8d7f24144d..2161dd064a 100644
--- a/var/spack/repos/builtin/packages/serialbox/package.py
+++ b/var/spack/repos/builtin/packages/serialbox/package.py
@@ -56,7 +56,7 @@ class Serialbox(CMakePackage):
# pp_ser fails to process source files containing Unicode character with
# Python 3 (https://github.com/GridTools/serialbox/pull/249):
- patch("ppser_py3.patch", when="@2.2.1:")
+ patch("ppser_py3.patch", when="@2.2.0:")
# NAG patches:
patch("nag/interface.patch", when="@2.0.1:%nag+fortran")
diff --git a/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch b/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch
index 1a15de7274..6997c634f6 100644
--- a/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch
+++ b/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch
@@ -1,23 +1,48 @@
-# This patch is applicable starting version 2.2.1
+# This patch is applicable starting version 2.2.0
--- a/src/serialbox-python/pp_ser/pp_ser.py
+++ b/src/serialbox-python/pp_ser/pp_ser.py
@@ -51 +51 @@ __email__ = 'oliver.fuhrer@meteoswiss.ch'
-def to_ascii(text):
+def open23(name, mode='r'):
-@@ -53 +53,9 @@ def to_ascii(text):
+@@ -53 +53,10 @@ def to_ascii(text):
- return bytes(text, 'ascii')
+ return open(name, mode,
-+ encoding=(None if 'b' in mode else 'UTF-8'))
++ encoding=(None if 'b' in mode else 'UTF-8'),
++ errors=(None if 'b' in mode else 'surrogateescape'))
+ else:
+ return open(name, mode)
+
+
+def bytes23(text):
+ if sys.version_info[0] == 3:
-+ return bytes(text, 'UTF-8')
-@@ -815 +823 @@ class PpSer:
++ return bytes(text, 'UTF-8', 'surrogateescape')
+@@ -57,0 +67,11 @@ def to_ascii(text):
++def getline(filename, lineno):
++ try:
++ return linecache.getline(filename, lineno)
++ except:
++ with open23(filename, 'r') as f:
++ for i, line in enumerate(f, start=1):
++ if i == lineno:
++ return line
++ return ''
++
++
+@@ -608 +628 @@ class PpSer:
+- nextline = linecache.getline(os.path.join(self.infile), lookahead_index)
++ nextline = getline(os.path.join(self.infile), lookahead_index)
+@@ -613 +633 @@ class PpSer:
+- nextline = linecache.getline(os.path.join(self.infile), lookahead_index)
++ nextline = getline(os.path.join(self.infile), lookahead_index)
+@@ -711 +731 @@ class PpSer:
+- nextline = linecache.getline(os.path.join(self.infile), lookahead_index)
++ nextline = getline(os.path.join(self.infile), lookahead_index)
+@@ -716 +736 @@ class PpSer:
+- nextline = linecache.getline(os.path.join(self.infile), lookahead_index)
++ nextline = getline(os.path.join(self.infile), lookahead_index)
+@@ -803 +823 @@ class PpSer:
- input_file = open(os.path.join(self.infile), 'r')
+ input_file = open23(os.path.join(self.infile), 'r')
-@@ -860 +868 @@ class PpSer:
+@@ -843 +863 @@ class PpSer:
- output_file.write(to_ascii(self.__outputBuffer))
+ output_file.write(bytes23(self.__outputBuffer))