Skip to content

Commit 22af7f6

Browse files
author
ajohns
committed
-added requires_rez_version, format_version attributes
-warning produced when newer package formats loaded that rez may fail to load
1 parent ba91e8e commit 22af7f6

File tree

4 files changed

+55
-1
lines changed

4 files changed

+55
-1
lines changed

src/rez/package_maker__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
from rez.utils._version import _rez_Version
12
from rez.utils.schema import Required, schema_keys
23
from rez.utils.filesystem import retain_cwd
34
from rez.utils.formatting import PackageRequest
45
from rez.utils.data_utils import AttrDictWrapper
56
from rez.utils.logging_ import print_warning
7+
from rez.exceptions import PackageMetadataError
68
from rez.package_resources_ import help_schema, _commands_schema, \
79
_function_schema, late_bound
810
from rez.package_repository import create_memory_package_repository
@@ -32,6 +34,8 @@
3234

3335

3436
package_schema = Schema({
37+
Optional("requires_rez_version"): And(basestring, Use(Version)),
38+
3539
Required("name"): basestring,
3640
Optional("base"): basestring,
3741
Optional("version"): Or(basestring,
@@ -92,6 +96,15 @@ def get_package(self):
9296
package_data = self._get_data()
9397
package_data = package_schema.validate(package_data)
9498

99+
# check compatibility with rez version
100+
if "requires_rez_version" in package_data:
101+
ver = package_data.pop("requires_rez_version")
102+
103+
if _rez_Version < ver:
104+
raise PackageMetadataError(
105+
"Failed reading package definition file: rez version >= %s "
106+
"needed (current version is %s)" % (ver, _rez_Version))
107+
95108
# create a 'memory' package repository containing just this package
96109
version_str = package_data.get("version") or "_NO_VERSION"
97110
repo_data = {self.name: {version_str: package_data}}

src/rez/package_resources_.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626

2727
# package attributes that we don't install
2828
package_build_only_keys = (
29+
"requires_rez_version",
2930
"build_command",
31+
"private_build_requires",
3032
"preprocess",
3133
)
3234

src/rez/utils/_version.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11

22

33
# Update this value to version up Rez. Do not place anything else in this file.
4-
_rez_version = "2.11.0"
4+
_rez_version = "2.12.0"
5+
6+
try:
7+
from rez.vendor.version.version import Version
8+
_rez_Version = Version(_rez_version)
9+
except:
10+
# the installer imports this file...
11+
pass
512

613

714
# Copyright 2013-2016 Allan Johns.

src/rezplugins/package_repository/filesystem.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
ConfigurationError, PackageRepositoryError
1212
from rez.utils.formatting import is_valid_package_name, PackageRequest
1313
from rez.utils.resources import cached_property
14+
from rez.utils.logging_ import print_warning
1415
from rez.serialise import load_from_file, FileFormat
1516
from rez.config import config
1617
from rez.utils.memcached import memcached, pool_memcached_connections
@@ -22,6 +23,32 @@
2223
import os
2324

2425

26+
#------------------------------------------------------------------------------
27+
# format version
28+
#
29+
# 1:
30+
# Initial format.
31+
# 2:
32+
# Late binding functions added.
33+
#------------------------------------------------------------------------------
34+
format_version = 2
35+
36+
37+
def check_format_version(filename, data):
38+
format_version_ = data.get("format_version")
39+
40+
if format_version_ is not None:
41+
try:
42+
format_version_ = int(format_version_)
43+
except:
44+
return
45+
46+
if format_version_ > format_version:
47+
print_warning(
48+
"Loading from %s may fail: newer format version (%d) than current "
49+
"format version (%d)" % (filename, format_version_, format_version))
50+
51+
2552
#------------------------------------------------------------------------------
2653
# utilities
2754
#------------------------------------------------------------------------------
@@ -141,6 +168,7 @@ def _load(self):
141168
"Missing package definition file: %r" % self)
142169

143170
data = load_from_file(self.filepath, self.file_format)
171+
check_format_version(self.filepath, data)
144172

145173
if "timestamp" not in data: # old format support
146174
data_ = self._load_old_formats()
@@ -275,6 +303,7 @@ def iter_packages(self):
275303
def _load(self):
276304
format_ = FileFormat[self.ext]
277305
data = load_from_file(self.filepath, format_)
306+
check_format_version(self.filepath, data)
278307
return data
279308

280309

@@ -859,6 +888,9 @@ def remove_build_keys(obj):
859888
overrides = overrides or {}
860889
overrides["timestamp"] = int(time.time())
861890

891+
# add the format version
892+
package_data["format_version"] = format_version
893+
862894
# apply attribute overrides
863895
for key, value in overrides.iteritems():
864896
if package_data.get(key) is None:

0 commit comments

Comments
 (0)