Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions src/rez/tests/test_package_repository.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright Contributors to the Rez Project


"""
Test package repository plugin.
"""
import unittest

from rezplugins.package_repository import filesystem
from rez.packages import create_package
from rez.tests.util import TestBase, TempdirMixin
from rez.utils.platform_ import platform_


class TestFilesystemPackageRepository(TestBase, TempdirMixin):
@classmethod
def setUpClass(cls):
TempdirMixin.setUpClass()

cls.settings = dict()

@classmethod
def tearDownClass(cls):
TempdirMixin.tearDownClass()

@unittest.skipIf(platform_.name != "windows",
"Skipping because this issue only affects case-insensitive platforms.")
def test_mismatching_case(self):
"""Test that we get a caught PackageRepositoryError on case-insensitive platforms."""
pool = filesystem.ResourcePool(cache_size=None)
pkg_repository = filesystem.FileSystemPackageRepository(self.root, pool)

package = create_package("myTestPackage", data={})
variant = next(package.iter_variants())
case_mismatch_package = create_package("MyTestPackage", data={})
case_mismatch_variant = next(case_mismatch_package.iter_variants())

pkg_repository._create_variant(variant, overrides={})
with self.assertRaises(filesystem.PackageRepositoryError):
pkg_repository._create_variant(case_mismatch_variant, overrides={})
20 changes: 14 additions & 6 deletions src/rez/tests/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,22 @@
unit tests for 'util' module
"""
import os
import tempfile
import sys
from rez.tests.util import TestBase
from rez.tests.util import TestBase, TempdirMixin
from rez.util import load_module_from_file


class TestLoadModuleFromFile(TestBase):
class TestLoadModuleFromFile(TestBase, TempdirMixin):
@classmethod
def setUpClass(cls):
TempdirMixin.setUpClass()

cls.settings = dict()

@classmethod
def tearDownClass(cls):
TempdirMixin.tearDownClass()

def test_load_module(self):
"""Ensure that the imported module does not show up in sys.modules"""
# Random chars are used in the module name to ensure that the module name is unique
Expand All @@ -21,10 +30,9 @@ def test_load_module(self):
module = 'utils_test_7cd3a335'

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

with open(os.path.join(tmpdir, filename), 'w') as fd:
with open(os.path.join(self.root, filename), 'w') as fd:
fd.write('')

load_module_from_file(module, os.path.join(tmpdir, filename))
load_module_from_file(module, os.path.join(self.root, filename))
self.assertEqual(sys.modules.get(module), None, msg='Module was found in sys.modules')
5 changes: 5 additions & 0 deletions src/rezplugins/package_repository/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -1206,6 +1206,11 @@ def _create_variant(self, variant, dry_run=False, overrides=None):
family = self.get_package_family(variant_name)
if not family:
family = self._create_family(variant_name)
if not family:
raise PackageRepositoryError(
f'Package family: {variant_name} does not exist and could not be created '
f'in repository: {self.location}. Perhaps family already exists with different character case?'
)

if isinstance(family, FileSystemCombinedPackageFamilyResource):
raise NotImplementedError(
Expand Down
Loading