aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimov <sergei.trofimov@arm.com>2018-11-02 11:48:00 +0000
committerMarc Bonnici <marc.bonnici@arm.com>2018-11-02 12:11:00 +0000
commitd1fba957b311e07442329c2ed777976f5133d739 (patch)
tree4682dc77a5ea31d95ea35d7a959fbd2ebd186d08
parent17bb0083e550c3dae59a805f0ee8dde4e8813339 (diff)
fw/target: add versioning to TargetInfo
Add format_version class attribute to TargetInfo to track format changes. This is checked when deserializing from POD to catch format changes between cached and obtained TargetInfo's.
-rw-r--r--wa/framework/target/info.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/wa/framework/target/info.py b/wa/framework/target/info.py
index 70a01aa0..015474f0 100644
--- a/wa/framework/target/info.py
+++ b/wa/framework/target/info.py
@@ -22,6 +22,7 @@ from devlib.target import KernelConfig, KernelVersion, Cpuinfo
from devlib.utils.android import AndroidProperties
from wa.framework.configuration.core import settings
+from wa.framework.exception import ConfigError
from wa.utils.serializer import read_pod, write_pod
@@ -247,8 +248,15 @@ def write_target_info_cache(cache):
def get_target_info_from_cache(system_id):
cache = read_target_info_cache()
pod = cache.get(system_id, None)
+
if not pod:
return None
+
+ pod_version = pod.get('format_version', 0)
+ if pod_version != TargetInfo.format_version:
+ msg = 'Target info version mismatch. Expected {}, but found {}.\nTry deleting {}'
+ raise ConfigError(msg.format(TargetInfo.format_version, pod_version,
+ settings.target_info_cache_file))
return TargetInfo.from_pod(pod)
@@ -262,6 +270,8 @@ def cache_target_info(target_info, overwrite=False):
class TargetInfo(object):
+ format_version = 1
+
@staticmethod
def from_pod(pod):
instance = TargetInfo()
@@ -305,6 +315,7 @@ class TargetInfo(object):
def to_pod(self):
pod = {}
+ pod['format_version'] = self.format_version
pod['target'] = self.target
pod['abi'] = self.abi
pod['cpus'] = [c.to_pod() for c in self.cpus]