Skip to content

Commit 74884f3

Browse files
committed
Fix to shlex.split for *_(BINARY|ARGUMENTS) settings on windows
shlex.split(), without posix=False, strips "\" characters, which is obviously problematic on windows.
1 parent 0ed51f7 commit 74884f3

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

pipeline/conf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import unicode_literals
33

4+
import os
45
import collections
56
import shlex
67

@@ -101,7 +102,7 @@ def __getitem__(self, key):
101102
value = self.settings[key]
102103
if key.endswith(("_BINARY", "_ARGUMENTS")):
103104
if isinstance(value, string_types):
104-
return tuple(shlex.split(value))
105+
return tuple(shlex.split(value, posix=(os.name == 'posix')))
105106
return tuple(value)
106107
return value
107108

tests/tests/test_conf.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import unicode_literals
33

4+
import sys
5+
from unittest import skipIf, skipUnless
6+
47
from django.test import TestCase
58

69
from pipeline.conf import PipelineSettings
@@ -23,10 +26,16 @@ def test_expected_splitting(self):
2326
s = PipelineSettings({"FOO_BINARY": "env actualprogram"})
2427
self.assertEqual(s.FOO_BINARY, ('env', 'actualprogram'))
2528

29+
@skipIf(sys.platform.startswith("win"), "requires posix platform")
2630
def test_expected_preservation(self):
2731
s = PipelineSettings({"FOO_BINARY": r"actual\ program"})
2832
self.assertEqual(s.FOO_BINARY, ('actual program',))
2933

34+
@skipUnless(sys.platform.startswith("win"), "requires windows")
35+
def test_win_path_preservation(self):
36+
s = PipelineSettings({"FOO_BINARY": "C:\\Test\\ActualProgram.exe argument"})
37+
self.assertEqual(s.FOO_BINARY, ('C:\\Test\\ActualProgram.exe', 'argument'))
38+
3039
def test_tuples_are_normal(self):
3140
s = PipelineSettings({"FOO_ARGUMENTS": ("explicit", "with", "args")})
3241
self.assertEqual(s.FOO_ARGUMENTS, ('explicit', 'with', 'args'))

0 commit comments

Comments
 (0)