milksnake icon indicating copy to clipboard operation
milksnake copied to clipboard

Non portable paths issue

Open nbigaouette-eai opened this issue 6 years ago • 0 comments

I had an issue with milksnake when setuping a CI pipeline for Linux, Mac and Windows.

For Windows I SET the CARGO_TARGET_DIR to a folder I can cache between runs. To prevent issue with Windows backslash being wrongly escaped (or not), I use a path similar to C:/cargo_cache/project_name/target.

After some debugging, I've realized that milksnake assumes / is used as paths separators when looking for files. See for example https://github.com/getsentry/milksnake/blob/ef0723e41df23d8f6357570c69c1e69cb31f9e9e/milksnake/setuptools_ext.py#L146

and https://github.com/getsentry/milksnake/blob/ef0723e41df23d8f6357570c69c1e69cb31f9e9e/milksnake/setuptools_ext.py#L165

Those two lines will join() the search path with the in_path argument which is split with forward slashes.

I thus end up with paths that look like C:cargo_cache/project_name/target and milksnake can't find the expected files.

It seems those lines attempt to replace the forward slashes with the platform's separator, but it's not doing a proper job.

If that is the expected behaviour, I would suggest doing something like that instead:

path = os.path.join(os.path.normalize(path), *os.path.normalize(in_path).split(os.sep))

or even just

path = os.path.join(os.path.normalize(path), os.path.normalize(in_path))

or maybe even simpler

path = os.path.normalize(os.path.join(path, in_path))

nbigaouette-eai avatar Jan 17 '19 17:01 nbigaouette-eai