Explorar o código

Workaround splitdrive limitations

splitdrive doesn't handle relative paths, so if volume_path contains
a relative path, we handle that differently and manually set drive to ''.

Signed-off-by: Mazz Mosley <[email protected]>
Mazz Mosley %!s(int64=10) %!d(string=hai) anos
pai
achega
c1d5ecaafe
Modificáronse 2 ficheiros con 12 adicións e 2 borrados
  1. 12 1
      compose/config/config.py
  2. 0 1
      tests/unit/config/config_test.py

+ 12 - 1
compose/config/config.py

@@ -526,7 +526,18 @@ def path_mappings_from_dict(d):
 
 
 def split_path_mapping(volume_path):
-    drive, volume_config = os.path.splitdrive(volume_path)
+    """
+    Ascertain if the volume_path contains a host path as well as a container
+    path. Using splitdrive so windows absolute paths won't cause issues with
+    splitting on ':'.
+    """
+    # splitdrive has limitations when it comes to relative paths, so when it's
+    # relative, handle special case to set the drive to ''
+    if volume_path.startswith('.') or volume_path.startswith('~'):
+        drive, volume_config = '', volume_path
+    else:
+        drive, volume_config = os.path.splitdrive(volume_path)
+
     if ':' in volume_config:
         (host, container) = volume_config.split(':', 1)
         return (container, drive + host)

+ 0 - 1
tests/unit/config/config_test.py

@@ -463,7 +463,6 @@ class VolumeConfigTest(unittest.TestCase):
         self.assertEqual(d['volumes'], ['/home/me/otherproject:/data'])
 
     @pytest.mark.skipif(not IS_WINDOWS_PLATFORM, reason='windows paths')
-    @pytest.mark.skipif(IS_WINDOWS_PLATFORM, reason='waiting for this to be resolved: https://github.com/docker/compose/issues/2128')
     def test_relative_path_does_expand_windows(self):
         d = make_service_dict('foo', {'build': '.', 'volumes': ['./data:/data']}, working_dir='C:\\Users\\me\\myproject')
         self.assertEqual(d['volumes'], ['C:\\Users\\me\\myproject\\data:/data'])