Skip to content

Commit

Permalink
Allowing enabling dependencies via defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
ktf committed Jan 27, 2025
1 parent 1091f6f commit 55d2525
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 11 deletions.
16 changes: 12 additions & 4 deletions alibuild_helpers/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,15 +261,23 @@ def detectArch():
except:
return doDetectArch(hasOsRelease, osReleaseLines, ["unknown", "", ""], "", "")

def filterByArchitecture(arch, requires):
def filterByArchitectureDefaults(arch, defaults, requires):
for r in requires:
require, matcher = ":" in r and r.split(":", 1) or (r, ".*")
if matcher.startswith("defaults="):
wanted = matcher[len("defaults="):]
if re.match(wanted, defaults):
yield require

Check warning on line 270 in alibuild_helpers/utilities.py

View check run for this annotation

Codecov / codecov/patch

alibuild_helpers/utilities.py#L267-L270

Added lines #L267 - L270 were not covered by tests
if re.match(matcher, arch):
yield require

def disabledByArchitecture(arch, requires):
def disabledByArchitectureDefaults(arch, defaults, requires):
for r in requires:
require, matcher = ":" in r and r.split(":", 1) or (r, ".*")
if matcher.startswith("defaults="):
wanted = matcher[len("defaults="):]
if not re.match(wanted, defaults):
yield require

Check warning on line 280 in alibuild_helpers/utilities.py

View check run for this annotation

Codecov / codecov/patch

alibuild_helpers/utilities.py#L277-L280

Added lines #L277 - L280 were not covered by tests
if not re.match(matcher, arch):
yield require

Expand Down Expand Up @@ -543,10 +551,10 @@ def getPackageList(packages, specs, configDir, preferSystem, noSystem,
validDefaults = None # no valid default works for all current packages

# For the moment we treat build_requires just as requires.
fn = lambda what: disabledByArchitecture(architecture, spec.get(what, []))
fn = lambda what: disabledByArchitectureDefaults(architecture, defaults, spec.get(what, []))

Check warning on line 554 in alibuild_helpers/utilities.py

View check run for this annotation

Codecov / codecov/patch

alibuild_helpers/utilities.py#L554

Added line #L554 was not covered by tests
spec["disabled"] += [x for x in fn("requires")]
spec["disabled"] += [x for x in fn("build_requires")]
fn = lambda what: filterByArchitecture(architecture, spec.get(what, []))
fn = lambda what: filterByArchitectureDefaults(architecture, defaults, spec.get(what, []))

Check warning on line 557 in alibuild_helpers/utilities.py

View check run for this annotation

Codecov / codecov/patch

alibuild_helpers/utilities.py#L557

Added line #L557 was not covered by tests
spec["requires"] = [x for x in fn("requires") if not x in disable]
spec["build_requires"] = [x for x in fn("build_requires") if not x in disable]
if spec["package"] != "defaults-release":
Expand Down
26 changes: 19 additions & 7 deletions tests/test_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Assuming you are using the mock library to ... mock things
from unittest.mock import patch

from alibuild_helpers.utilities import doDetectArch, filterByArchitecture
from alibuild_helpers.utilities import doDetectArch, filterByArchitectureDefaults, disabledByArchitectureDefaults
from alibuild_helpers.utilities import Hasher
from alibuild_helpers.utilities import asList
from alibuild_helpers.utilities import prunePaths
Expand Down Expand Up @@ -175,12 +175,24 @@ def test_asList(self):
self.assertEqual(asList(None), [None])

def test_filterByArchitecture(self):
self.assertEqual(["AliRoot"], list(filterByArchitecture("osx_x86-64", ["AliRoot"])))
self.assertEqual([], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!osx)"])))
self.assertEqual(["GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!osx)", "GCC"])))
self.assertEqual(["AliRoot", "GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!slc6)", "GCC"])))
self.assertEqual(["GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:slc6", "GCC:osx"])))
self.assertEqual([], list(filterByArchitecture("osx_x86-64", [])))
self.assertEqual(["AliRoot"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot"])))
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)"])))
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)", "GCC"])))
self.assertEqual(["AliRoot", "GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!slc6)", "GCC"])))
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:osx"])))
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "ali", [])))
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:defaults=ali"])))
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "o2", ["AliRoot:slc6", "GCC:defaults=ali"])))

def test_disabledByArchitecture(self):
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot"])))
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)"])))
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)", "GCC"])))
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!slc6)", "GCC"])))
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:osx"])))
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", [])))
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:defaults=ali"])))
self.assertEqual(["AliRoot", "GCC"], list(disabledByArchitectureDefaults("osx_x86-64", "o2", ["AliRoot:slc6", "GCC:defaults=ali"])))

Check warning on line 195 in tests/test_utilities.py

View check run for this annotation

Codecov / codecov/patch

tests/test_utilities.py#L195

Added line #L195 was not covered by tests

def test_prunePaths(self):
fake_env = {
Expand Down

0 comments on commit 55d2525

Please sign in to comment.