aboutsummaryrefslogtreecommitdiff
path: root/Coordinator.cpp
diff options
context:
space:
mode:
authorSteven Moreland <smoreland@google.com>2017-10-11 09:35:42 -0700
committerSteven Moreland <smoreland@google.com>2017-10-11 19:07:10 +0000
commit87b26d7809cf5f41ccd6c977decafeedaaa51c8c (patch)
treecb7b20793ab6d0338813675df4526837f4baa720 /Coordinator.cpp
parentb9a9492c600bdf174948ddba575a06cae85ac2f9 (diff)
downloadhidl-87b26d7809cf5f41ccd6c977decafeedaaa51c8c.tar.gz
Don't enforce minor ver restrictions if types-only
It doesn't make sense to require at least one interface to extend an interface from the previous package if there are no previous interfaces. Test: hidl_version_test Bug: 67678594 Change-Id: I361f569ebc82154dcdaea98987ad3f09827e0903
Diffstat (limited to 'Coordinator.cpp')
-rw-r--r--Coordinator.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/Coordinator.cpp b/Coordinator.cpp
index 14584678..d8a9bc54 100644
--- a/Coordinator.cpp
+++ b/Coordinator.cpp
@@ -427,6 +427,20 @@ std::string Coordinator::convertPackageRootToPath(const FQName &fqName) const {
return packageRoot; // now converted to a path
}
+status_t Coordinator::isTypesOnlyPackage(const FQName& package, bool* result) const {
+ std::vector<FQName> packageInterfaces;
+
+ status_t err = appendPackageInterfacesToVector(package, &packageInterfaces);
+
+ if (err != OK) {
+ *result = false;
+ return err;
+ }
+
+ *result = packageInterfaces.size() == 1 && packageInterfaces[0].name() == "types";
+ return OK;
+}
+
status_t Coordinator::enforceRestrictionsOnPackage(const FQName& fqName,
Enforce enforcement) const {
CHECK(enforcement == Enforce::FULL || enforcement == Enforce::NO_HASH ||
@@ -503,7 +517,15 @@ status_t Coordinator::enforceMinorVersionUprevs(const FQName &currentPackage) co
return UNKNOWN_ERROR;
}
- status_t err;
+ bool prevIsTypesOnly;
+ status_t err = isTypesOnlyPackage(prevPackage, &prevIsTypesOnly);
+ if (err != OK) return err;
+
+ if (prevIsTypesOnly) {
+ // A types only package can be extended in any way.
+ return OK;
+ }
+
std::vector<FQName> packageInterfaces;
err = appendPackageInterfacesToVector(currentPackage, &packageInterfaces);
if (err != OK) {