diff options
author | Steven Moreland <smoreland@google.com> | 2017-10-11 09:35:42 -0700 |
---|---|---|
committer | Steven Moreland <smoreland@google.com> | 2017-10-11 19:07:10 +0000 |
commit | 87b26d7809cf5f41ccd6c977decafeedaaa51c8c (patch) | |
tree | cb7b20793ab6d0338813675df4526837f4baa720 /Coordinator.cpp | |
parent | b9a9492c600bdf174948ddba575a06cae85ac2f9 (diff) | |
download | hidl-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.cpp | 24 |
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 ¤tPackage) 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) { |