From 574839d855cad1f3ccc817e18b856db70ee2b9e1 Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Sat, 22 Apr 2023 15:05:14 +1000 Subject: sb/path: Handle unicode filenames in a source path The change leaves the encoding in that currently exists because I cannot remember why it is there. If an encoding error happens return the same path to see if it will work. --- source-builder/sb/path.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/source-builder/sb/path.py b/source-builder/sb/path.py index d36e12a..d9e926e 100644 --- a/source-builder/sb/path.py +++ b/source-builder/sb/path.py @@ -71,6 +71,20 @@ def shell(path): path = path.replace('//', '/') return path +def host_encode(dpath): + '''Encoding the path was present in the RSB however on a ZFS pool I am + seeing a failure with a go test in gcc: + gcc/testsuite/go.test/test/fixedbugs/issue27836.dir + Not encoding works however I am not sure why the encoding was added + so the following keeps the encoding and falls back to not encoded + if there is an error.0 + ''' + try: + return host(dpath).encode('utf8') + except: + pass + return dpath + def basename(path): path = shell(path) return shell(os.path.basename(host(path))) @@ -189,11 +203,11 @@ def removeall(path): # get to the max path length on Windows. # def _isdir(path): - hpath = host(path).encode('utf8') + hpath = host_encode(path) return os.path.isdir(hpath) and not os.path.islink(hpath) def _remove_node(path): - hpath = host(path).encode('utf8') + hpath = host_encode(path) if not os.path.islink(hpath) and not os.access(hpath, os.W_OK): os.chmod(hpath, stat.S_IWUSR) if _isdir(path): @@ -216,7 +230,7 @@ def removeall(path): _remove_node(dir) path = shell(path) - hpath = host(path).encode('utf8') + hpath = host_encode(path) if os.path.exists(hpath): _remove(path) @@ -317,11 +331,11 @@ def get_size(path, depth = -1): # get to the max path length on Windows. # def _isdir(path): - hpath = host(path).encode('utf8') + hpath = host_encode(path) return os.path.isdir(hpath) and not os.path.islink(hpath) def _node_size(path): - hpath = host(path).encode('utf8') + hpath = host_encode(path) size = 0 if not os.path.islink(hpath): size = os.path.getsize(hpath) @@ -345,7 +359,7 @@ def get_size(path, depth = -1): return size path = shell(path) - hpath = host(path).encode('utf8') + hpath = host_encode(path) size = 0 if os.path.exists(hpath): -- cgit v1.2.3