summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Reiter <reiter.christoph@gmail.com>2019-04-21 10:59:28 +0200
committerChristoph Reiter <reiter.christoph@gmail.com>2019-04-21 11:23:22 +0200
commit1b90a49628ad98859b6cf078da5f94e57b833c83 (patch)
treeb0313a662ba7e07b5a68cea12d71556ddfaeda66
parent07c387d7badcf31d7d66dceb1c2b8ca57a5df4e0 (diff)
downloadgobject-introspection-1b90a49628ad98859b6cf078da5f94e57b833c83.tar.gz
scanner: Fix error on Windows in case source files are on different drives
os.path.commonpath() raises ValueError if the paths given to it are on different drives. Handle that case by giving up and add a test. Reported here: https://github.com/msys2/MINGW-packages/pull/5258#issuecomment-485230864
-rw-r--r--giscanner/scannermain.py7
-rw-r--r--tests/scanner/test_scanner.py10
2 files changed, 16 insertions, 1 deletions
diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py
index c004fb19..4b723695 100644
--- a/giscanner/scannermain.py
+++ b/giscanner/scannermain.py
@@ -505,7 +505,12 @@ def get_source_root_dirs(options, filenames):
if not dirs:
return []
- common = os.path.commonpath(dirs)
+ try:
+ common = os.path.commonpath(dirs)
+ except ValueError:
+ # ValueError: On Windows in case the paths are on different drives
+ return dirs
+
# If the only common path is the root directory give up
if os.path.dirname(common) == common:
return dirs
diff --git a/tests/scanner/test_scanner.py b/tests/scanner/test_scanner.py
index 2513c0de..85953964 100644
--- a/tests/scanner/test_scanner.py
+++ b/tests/scanner/test_scanner.py
@@ -25,6 +25,16 @@ class TestScanner(unittest.TestCase):
paths = get_source_root_dirs(options, [])
self.assertEqual(paths, [])
+ @unittest.skipUnless(os.name == "nt", "Windows only")
+ def test_get_source_root_dirs_different_drives(self):
+ options = optparse.Values({"sources_top_dirs": []})
+ names = [
+ os.path.join("X:", os.sep, "foo"),
+ os.path.join("Y:", os.sep, "bar"),
+ ]
+ paths = get_source_root_dirs(options, names)
+ self.assertEqual(paths, list(map(os.path.dirname, names)))
+
if __name__ == '__main__':
unittest.main()