| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.pkg; |
| |
| using fuchsia.io; |
| using zx; |
| |
| /// This resolves packages from a repository. |
| /// |
| /// This is intended to be implemented by package resolver components, and used by |
| /// repository administration tools. |
| [Discoverable] |
| protocol PackageResolver { |
| /// Populates or updates the cache of a package with the given selectors as specified by the |
| /// update policy. |
| /// |
| /// Ensures that a package is on the local filesystem. |
| /// |
| /// + request `package_url` the package URL for a package (TODO: link to docs). |
| /// + request `selectors` the package selectors (TODO: link to docs). |
| /// + request `update_policy` the policy to use when fetching packages. |
| /// + request `dir` a request for a directory that will be resolved when the package has |
| /// been successfully cached. |
| /// * error a zx_status value indicating failure. One of the following: |
| /// * `ZX_ERR_ACCESS_DENIED` if the resolver does not have permission to fetch a |
| /// package blob. |
| /// * `ZX_ERR_INTERNAL` if the resolver encountered an otherwise unspecified error while |
| /// handling the request |
| /// * `ZX_ERR_IO` if there is some other unspecified error during I/O. |
| /// * `ZX_ERR_NOT_FOUND` if the package or a package blob does not exist. |
| /// * `ZX_ERR_ADDRESS_UNREACHABLE` if the resolver does not know about the repo. |
| /// * `ZX_ERR_NO_SPACE` if there is no space available to store the package. |
| /// * `ZX_ERR_UNAVAILABLE` if the resolver is currently unable to fetch a package blob. |
| // TODO(fxbug.dev/45811) change `package_url` from string to PackageUrl |
| Resolve( |
| string package_url, |
| vector<string> selectors, |
| UpdatePolicy update_policy, |
| request<fuchsia.io.Directory> dir |
| ) -> () error zx.status; |
| |
| /// Determines the hash of a package. |
| /// |
| /// + request `package_url` the package URL for a package. |
| /// - response `meta_far_blob_id` the hash of the package. |
| /// * error a zx_status value indicating failure. One of the following: |
| /// * `ZX_ERR_INTERNAL` if the resolver encountered an otherwise unspecified error |
| /// while handling the request |
| /// * `ZX_ERR_NOT_FOUND` if the package does not exist. |
| /// * `ZX_ERR_ADDRESS_UNREACHABLE` if the resolver does not know about the repo. |
| GetHash( |
| PackageUrl package_url |
| ) -> (BlobId meta_far_blob_id) error zx.status; |
| }; |
| |
| /// The policy to use when resolving packages. |
| struct UpdatePolicy { |
| /// Whether the resolver should fetch the package if it is not present on the local system. |
| bool fetch_if_absent; |
| |
| /// Whether the resolver should allow old versions of the package to be used. |
| bool allow_old_versions; |
| }; |