aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-10-26 19:41:42 +0200
committerXavier Claessens <xclaesse@gmail.com>2021-10-26 15:16:11 -0400
commit0fea9965ada82845c1e8a908078c573a68a2029a (patch)
treeccd564eac07bd4bb175df81549b285ff4a6eb5df
parent89e9b502929accf8690a2fcc722e8e37fd90a772 (diff)
downloadmeson-0fea9965ada82845c1e8a908078c573a68a2029a.zip
meson-0fea9965ada82845c1e8a908078c573a68a2029a.tar.gz
meson-0fea9965ada82845c1e8a908078c573a68a2029a.tar.bz2
interpreter: Revert old path joining behavior (fixes #9450)
-rw-r--r--mesonbuild/interpreter/primitives/string.py3
-rw-r--r--test cases/common/111 pathjoin/meson.build3
2 files changed, 5 insertions, 1 deletions
diff --git a/mesonbuild/interpreter/primitives/string.py b/mesonbuild/interpreter/primitives/string.py
index 5b29501..3f8df5e 100644
--- a/mesonbuild/interpreter/primitives/string.py
+++ b/mesonbuild/interpreter/primitives/string.py
@@ -2,6 +2,7 @@
# SPDX-license-identifier: Apache-2.0
import re
+import os
from pathlib import PurePath
import typing as T
@@ -159,7 +160,7 @@ class StringHolder(ObjectHolder[str]):
@FeatureNew('/ with string arguments', '0.49.0')
@typed_operator(MesonOperator.DIV, str)
def op_div(self, other: str) -> str:
- return (PurePath(self.held_object) / other).as_posix()
+ return os.path.join(self.held_object, other).replace('\\', '/')
@typed_operator(MesonOperator.INDEX, int)
def op_index(self, other: int) -> str:
diff --git a/test cases/common/111 pathjoin/meson.build b/test cases/common/111 pathjoin/meson.build
index d3957dd..1c339dd 100644
--- a/test cases/common/111 pathjoin/meson.build
+++ b/test cases/common/111 pathjoin/meson.build
@@ -7,6 +7,7 @@ assert(join_paths('foo', 'bar', 'baz') == 'foo/bar/baz', 'Path joining is broken
assert(join_paths('/foo', 'bar') == '/foo/bar', 'Path joining is broken')
assert(join_paths('foo', '/bar') == '/bar', 'Absolute path joining is broken')
assert(join_paths('/foo', '/bar') == '/bar', 'Absolute path joining is broken')
+assert(join_paths('/foo', '') == '/foo/', 'Trailing / on path')
# Test array form since people are using that too
assert(join_paths(['foo']) == 'foo', 'Single argument join is broken')
@@ -15,6 +16,7 @@ assert(join_paths(['foo', 'bar', 'baz']) == 'foo/bar/baz', 'Path joining is brok
assert(join_paths(['/foo', 'bar']) == '/foo/bar', 'Path joining is broken')
assert(join_paths(['foo', '/bar']) == '/bar', 'Absolute path joining is broken')
assert(join_paths(['/foo', '/bar']) == '/bar', 'Absolute path joining is broken')
+assert(join_paths(['/foo', '']) == '/foo/', 'Trailing / on path')
# Division operator should do the same as join_paths
assert('foo' / 'bar' == 'foo/bar', 'Path division is broken')
@@ -22,3 +24,4 @@ assert('foo' /'bar' /'baz' == 'foo/bar/baz', 'Path division is broken')
assert('/foo' / 'bar' == '/foo/bar', 'Path division is broken')
assert('foo' / '/bar' == '/bar', 'Absolute path division is broken')
assert('/foo' / '/bar' == '/bar', 'Absolute path division is broken')
+assert('/foo' / '' == '/foo/', 'Trailing / on path')