Skip to content

Commit dac6bcb

Browse files
Improve package repository case insensitive error handling (#1974)
Signed-off-by: BryceGattis <[email protected]> Signed-off-by: Bryce Gattis <[email protected]> Co-authored-by: Jean-Christophe Morin <[email protected]>
1 parent 0c4b28f commit dac6bcb

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
# Copyright Contributors to the Rez Project
3+
4+
5+
"""
6+
Test package repository plugin.
7+
"""
8+
import unittest
9+
10+
from rezplugins.package_repository import filesystem
11+
from rez.packages import create_package
12+
from rez.tests.util import TestBase, TempdirMixin
13+
from rez.utils.platform_ import platform_
14+
15+
16+
class TestFilesystemPackageRepository(TestBase, TempdirMixin):
17+
@classmethod
18+
def setUpClass(cls):
19+
TempdirMixin.setUpClass()
20+
21+
cls.settings = dict()
22+
23+
@classmethod
24+
def tearDownClass(cls):
25+
TempdirMixin.tearDownClass()
26+
27+
@unittest.skipIf(platform_.name != "windows",
28+
"Skipping because this issue only affects case-insensitive platforms.")
29+
def test_mismatching_case(self):
30+
"""Test that we get a caught PackageRepositoryError on case-insensitive platforms."""
31+
pool = filesystem.ResourcePool(cache_size=None)
32+
pkg_repository = filesystem.FileSystemPackageRepository(self.root, pool)
33+
34+
package = create_package("myTestPackage", data={})
35+
variant = next(package.iter_variants())
36+
case_mismatch_package = create_package("MyTestPackage", data={})
37+
case_mismatch_variant = next(case_mismatch_package.iter_variants())
38+
39+
pkg_repository._create_variant(variant, overrides={})
40+
with self.assertRaises(filesystem.PackageRepositoryError):
41+
pkg_repository._create_variant(case_mismatch_variant, overrides={})

src/rez/tests/test_util.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,22 @@
66
unit tests for 'util' module
77
"""
88
import os
9-
import tempfile
109
import sys
11-
from rez.tests.util import TestBase
10+
from rez.tests.util import TestBase, TempdirMixin
1211
from rez.util import load_module_from_file
1312

1413

15-
class TestLoadModuleFromFile(TestBase):
14+
class TestLoadModuleFromFile(TestBase, TempdirMixin):
15+
@classmethod
16+
def setUpClass(cls):
17+
TempdirMixin.setUpClass()
18+
19+
cls.settings = dict()
20+
21+
@classmethod
22+
def tearDownClass(cls):
23+
TempdirMixin.tearDownClass()
24+
1625
def test_load_module(self):
1726
"""Ensure that the imported module does not show up in sys.modules"""
1827
# Random chars are used in the module name to ensure that the module name is unique
@@ -21,10 +30,9 @@ def test_load_module(self):
2130
module = 'utils_test_7cd3a335'
2231

2332
filename = '{0}.py'.format(module)
24-
tmpdir = tempfile.mkdtemp(prefix="rez_selftest_")
2533

26-
with open(os.path.join(tmpdir, filename), 'w') as fd:
34+
with open(os.path.join(self.root, filename), 'w') as fd:
2735
fd.write('')
2836

29-
load_module_from_file(module, os.path.join(tmpdir, filename))
37+
load_module_from_file(module, os.path.join(self.root, filename))
3038
self.assertEqual(sys.modules.get(module), None, msg='Module was found in sys.modules')

src/rezplugins/package_repository/filesystem.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,11 @@ def _create_variant(self, variant, dry_run=False, overrides=None):
12061206
family = self.get_package_family(variant_name)
12071207
if not family:
12081208
family = self._create_family(variant_name)
1209+
if not family:
1210+
raise PackageRepositoryError(
1211+
f'Package family: {variant_name} does not exist and could not be created '
1212+
f'in repository: {self.location}. Perhaps family already exists with different character case?'
1213+
)
12091214

12101215
if isinstance(family, FileSystemCombinedPackageFamilyResource):
12111216
raise NotImplementedError(

0 commit comments

Comments
 (0)