Skip to content

Commit 792768e

Browse files
committed
Code simplification to build rez requirements
1 parent 43cd45c commit 792768e

File tree

2 files changed

+35
-34
lines changed

2 files changed

+35
-34
lines changed

meshroom/core/plugins.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class RezProcessEnv(ProcessEnv):
152152
"""
153153
"""
154154

155-
REZ_DELIMITER_PATTERN = re.compile(r"(-|==|>=|>|<=|<)")
155+
REZ_DELIMITER_PATTERN = re.compile(r"-|==|>=|>|<=|<")
156156

157157
def __init__(self, folder: str, configEnv: dict[str: str], uri: str = ""):
158158
if not uri:
@@ -167,35 +167,39 @@ def resolveRezSubrequires(self) -> list[str]:
167167
environment (if this package is defined).
168168
"""
169169
subrequires = os.environ.get(f"{self.uri.upper()}_SUBREQUIRES", "").split(os.pathsep)
170-
packages = []
170+
if not subrequires:
171+
return []
171172

173+
packages = []
172174
# Packages that are resolved in the current environment
173175
currentEnvPackages = []
174176
resolvedVersions = {}
175-
if "REZ_REQUEST" in os.environ:
176-
resolvedPackages = os.getenv("REZ_RESOLVE", "").split()
177+
if "REZ_USED_RESOLVE" in os.environ:
178+
resolvedPackages = os.getenv("REZ_USED_RESOLVE", "").split()
177179
for package in resolvedPackages:
178180
if package.startswith("~"):
179181
continue
180182
currentEnvPackages.append(package)
181-
version = package.split("-")
182-
if len(version) == 2:
183-
resolvedVersions[version[0]] = version[1]
184-
elif len(version) > 2: # Handle case with multiple hyphen-minus
185-
resolvedVersions[version[0]] = "-".join(version[1:])
183+
name, version = self.REZ_DELIMITER_PATTERN.split(package, maxsplit=1)
184+
resolvedVersions[name] = version
186185
logging.debug("Packages in the current environment: " + ", ".join(currentEnvPackages))
187186

188187
# Take packages with the set versions for those which have one, and try to take packages in the current
189188
# environment (if they are resolved in it)
190189
for package in subrequires:
191-
if self.REZ_DELIMITER_PATTERN.findall(package): # The subrequires ask for a specific version
192-
packages.append(package)
193-
else:
194-
packageName = self.REZ_DELIMITER_PATTERN.split(package)[0]
195-
resolvedVersion = resolvedVersions.get(packageName)
196-
if (resolvedVersion!=None) and (resolvedVersion!=""):
197-
packages.append(packageName + "==" + resolvedVersion)
198-
else:
190+
packageTuple = self.REZ_DELIMITER_PATTERN.split(package, maxsplit=1)
191+
match len(packageTuple):
192+
case 1:
193+
# Only the package name in the subrequires.
194+
# Search for a corresponding version in the parent environment.
195+
packageName = packageTuple[0]
196+
parentResolvedVersion = resolvedVersions.get(packageName)
197+
if parentResolvedVersion:
198+
packages.append(f"{packageName}=={parentResolvedVersion}")
199+
else:
200+
packages.append(package)
201+
case 2:
202+
# The subrequires ask for a specific version
199203
packages.append(package)
200204

201205
logging.debug("Packages for the execution environment: " + ", ".join(packages))

meshroom/submitters/simpleFarmSubmitter.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,35 @@ class SimpleFarmSubmitter(BaseSubmitter):
2222
environment = {}
2323
ENGINE = ''
2424
DEFAULT_TAGS = {'prod': ''}
25-
REZ_DELIMITER_PATTERN = re.compile(r"(-|==|>=|>|<=|<)")
25+
REZ_DELIMITER_PATTERN = re.compile(r"-|==|>=|>|<=|<")
2626

2727
def __init__(self, parent=None):
2828
super().__init__(name='SimpleFarm', parent=parent)
2929
self.engine = os.environ.get('MESHROOM_SIMPLEFARM_ENGINE', 'tractor')
3030
self.share = os.environ.get('MESHROOM_SIMPLEFARM_SHARE', 'vfx')
3131
self.prod = os.environ.get('PROD', 'mvg')
32-
if 'REZ_REQUEST' in os.environ:
33-
packages = os.environ.get('REZ_USED_REQUEST', '').split()
32+
if 'REZ_USED_REQUEST' in os.environ:
33+
requestPackages = os.environ.get('REZ_USED_REQUEST', '').split()
3434
resolvedPackages = os.environ.get('REZ_RESOLVE', '').split()
3535
resolvedVersions = {}
3636
for r in resolvedPackages:
3737
# remove implicit packages
3838
if r.startswith('~'):
3939
continue
4040
# logging.info('REZ: {}'.format(str(r)))
41-
v = r.split('-')
41+
name, version = r.split('-', maxsplit=1)
4242
# logging.info(' v: {}'.format(str(v)))
43-
if len(v) == 2:
44-
resolvedVersions[v[0]] = v[1]
45-
elif len(v) > 2: # Handle case with multiple hyphen-minus
46-
resolvedVersions[v[0]] = "-".join(v[1:])
47-
usedPackages = set() # Use set to remove duplicates
48-
for p in packages:
49-
if p.startswith('~') or p.startswith("!"):
43+
resolvedVersions[name] = version
44+
requestPackageNames = set() # Use set to remove duplicates
45+
for p in requestPackages:
46+
if p.startswith('~'):
5047
continue
51-
v = self.REZ_DELIMITER_PATTERN.split(p)
52-
usedPackages.add(v[0])
53-
for p in usedPackages:
54-
# Use "==" to make sure we have the same version in the job that the one we have in the env
55-
# where meshroom is launched
56-
self.reqPackages.append("==".join([p, resolvedVersions[p]]))
48+
v = self.REZ_DELIMITER_PATTERN.split(p, maxsplit=1)
49+
requestPackageNames.add(v[0])
50+
for p in requestPackageNames:
51+
# Use "==" to guarantee that the job uses the exact same version
52+
# as the environment where Meshroom was launched.
53+
self.reqPackages.append(f"{p}=={resolvedVersions[p]}")
5754
logging.debug(f'REZ Packages: {str(self.reqPackages)}')
5855
elif 'REZ_MESHROOM_VERSION' in os.environ:
5956
self.reqPackages = [f"meshroom-{os.environ.get('REZ_MESHROOM_VERSION', '')}"]

0 commit comments

Comments
 (0)