Extend test fixture for testing artifact selectors in GMM
Trust missing components when resolution is trying a virtual platform
This commit adds a special case in the resolution engine for missing modules.
The default behavior, when a module is missing, is to cache the result. However,
when there are multiple repositories, it is possible for a module to be found
in a subsequent repository, in which case the result is deemed authoritative,
and we wouldn't try again on the repositories which had "missing metadata". But,
for UX reasons, if a module is missing from _all_ repositories, we would always
try again on the next build, despite knowing that the module would be absent.
This was intended to solve the following use case:
- BuildA attempts to resolve org:module:1.1, but the user forgot to publish this module version, so resolution fails
- BuildB executes, publishing org:module:1.1
- BuildA executes again, without using --refresh-dependencies. We prefer making additional network calls rather than failing the build again.
This behavior interferes with the "virtual platform" use case, where we need
to pre-emptively try to find a module, without knowing if it actually exists.
This commit adds a flag, `retryMissing`, which is by default `true`, but can be set
to false when we resolve a module. If so, then the engine will trust the cached missing
status. Virtual platforms (and edges) use this new method, bypassing the old path.
12 Jul 18 4fa9b2d2ec1330c37be3b122966bf878b633fcc2