pub struct GitlabCiRegistry { /* private fields */ }Expand description
deps_core::Registry implementation for GitLab CI, routing every fetch across the
registered (host, endpoint) table (spec §7a).
Implementations§
Source§impl GitlabCiRegistry
impl GitlabCiRegistry
Sourcepub fn new(client: Arc<GitlabApiClient>) -> Self
pub fn new(client: Arc<GitlabApiClient>) -> Self
Creates a new registry sharing client.
Sourcepub fn tag_index(&self) -> Arc<DashMap<PackageName, Arc<TagIndex>>>
pub fn tag_index(&self) -> Arc<DashMap<PackageName, Arc<TagIndex>>>
Shares this registry’s TagIndex map with crate::formatter::GitlabCiFormatter.
Sourcepub fn routes(&self) -> Arc<DashMap<String, GitlabRoute>>
pub fn routes(&self) -> Arc<DashMap<String, GitlabRoute>>
Shares this registry’s route table with crate::formatter::GitlabCiFormatter,
which needs it to distinguish a project: (Tags) route from a component:
(Releases) route for the hover-heading-link carve-out (spec §8.2).
Sourcepub fn register_routes(
&self,
routes: &[(String, GitlabRoute)],
) -> HashSet<String>
pub fn register_routes( &self, routes: &[(String, GitlabRoute)], ) -> HashSet<String>
Registers every (route_key, route) pair in routes (idempotent per key), capacity-
capped at MAX_GITLAB_ROUTES, and returns the set of route_keys that were
refused because the cap was already reached (spec §3.2/§4.6’s downgrade pass —
GitlabCiEcosystem::parse_manifest rewrites every dependency carrying a refused key
to CustomRegistry + HostRef::Unresolved before returning the parse result).
Sourcepub async fn resolve_component_pin(
&self,
name: &PackageName,
route: &GitlabRoute,
pin: &PinStyle,
raw: &str,
) -> Result<Option<GitlabCiVersion>>
pub async fn resolve_component_pin( &self, name: &PackageName, route: &GitlabRoute, pin: &PinStyle, raw: &str, ) -> Result<Option<GitlabCiVersion>>
Resolves a component: include’s already-classified pin against route’s
published releases via spec FR-007’s priority ladder
(crate::component::resolve_component_pin) — H1 (#466 review): this is the real
production call path that ladder was missing; previously it was exercised only by its
own unit tests.
Fetches (and caches, via the same Self::fetch_route path get_versions_from
uses) route’s full release list, never the raw tag list (FR-004/FR-007) — an
unreleased tag is not a usable component version. route.endpoint is expected to be
EndpointKind::Releases; called with a EndpointKind::Tags route this still
returns a result (the shared ladder degrades to its Sha/Tag/Branch arms, which
are valid for a tag list too), but callers only need it for component: includes —
a project: include’s SHA pin already resolves via Self::tag_index with no extra
fetch.
§Errors
Propagates the underlying fetch error unchanged (rate limit, not-found, etc).
Trait Implementations§
Source§impl Clone for GitlabCiRegistry
impl Clone for GitlabCiRegistry
Source§fn clone(&self) -> GitlabCiRegistry
fn clone(&self) -> GitlabCiRegistry
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Registry for GitlabCiRegistry
impl Registry for GitlabCiRegistry
Source§fn get_versions<'a>(
&'a self,
name: &'a PackageName,
) -> BoxFuture<'a, Result<Vec<Box<dyn Version>>>>
fn get_versions<'a>( &'a self, name: &'a PackageName, ) -> BoxFuture<'a, Result<Vec<Box<dyn Version>>>>
Unconditional DepsError::PackageNotFound, never a host guess (spec §7a) — this
crate’s dependencies are only ever routable via get_versions_from’s
AlternateRegistry dispatch; a &PackageName alone carries no host.
Source§fn get_latest_matching<'a>(
&'a self,
name: &'a PackageName,
_req: &'a VersionReq,
) -> BoxFuture<'a, Result<Option<Box<dyn Version>>>>
fn get_latest_matching<'a>( &'a self, name: &'a PackageName, _req: &'a VersionReq, ) -> BoxFuture<'a, Result<Option<Box<dyn Version>>>>
Unconditional DepsError::PackageNotFound — this trait method’s counterpart to
get_versions; equally unroutable without a source.
Source§fn search<'a>(
&'a self,
_query: &'a str,
_limit: usize,
) -> BoxFuture<'a, Result<Vec<Box<dyn Metadata>>>>
fn search<'a>( &'a self, _query: &'a str, _limit: usize, ) -> BoxFuture<'a, Result<Vec<Box<dyn Metadata>>>>
No cheap GitLab search endpoint under the NFR-002 rate-limit budget.
Source§fn select_latest_matching(
&self,
versions: &[Box<dyn Version>],
req: &VersionReq,
) -> Option<usize>
fn select_latest_matching( &self, versions: &[Box<dyn Version>], req: &VersionReq, ) -> Option<usize>
M-b (#466 review): a bare partial-shaped requirement ("1.2") is parsed with
GitLab’s own tilde semantics via crate::component::gitlab_version_req, not the
semver crate’s implicit-caret default — and a literal ~latest (which
semver::VersionReq::parse cannot parse at all, since "latest" is not a version)
is special-cased to pick the highest non-prerelease version, mirroring
crate::component::resolve_component_pin’s Latest arm.
Source§fn reports_yanked(&self) -> bool
fn reports_yanked(&self) -> bool
GitLab exposes no yank/deprecation signal for either endpoint.
Source§fn get_versions_from<'a>(
&'a self,
name: &'a PackageName,
source: &'a DependencySource,
_freshness: FreshnessSettings,
) -> BoxFuture<'a, Result<Vec<Box<dyn Version>>>>
fn get_versions_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, _freshness: FreshnessSettings, ) -> BoxFuture<'a, Result<Vec<Box<dyn Version>>>>
get_versions_with, but additionally carries the
dependency’s resolved DependencySource, for a registry that routes a single
fetch across more than one underlying index (e.g. deps-cargo’s CargoRegistry,
which dispatches a DependencySource::AlternateRegistry to a private sparse index
instead of crates.io). Read moreSource§fn get_latest_matching_from<'a>(
&'a self,
name: &'a PackageName,
source: &'a DependencySource,
req: &'a VersionReq,
_minimum_stability: Option<&'a str>,
) -> BoxFuture<'a, Result<Option<Box<dyn Version>>>>
fn get_latest_matching_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, req: &'a VersionReq, _minimum_stability: Option<&'a str>, ) -> BoxFuture<'a, Result<Option<Box<dyn Version>>>>
get_latest_matching_with_context,
but additionally carries the dependency’s resolved DependencySource — the
get_latest_matching-shaped counterpart to
get_versions_from, covering the fallback path a caller
takes when the list-based pick fails on a non-empty get_versions_from
result (see deps_core::lsp_helpers::hover’s list_fallback_latest and
deps-lsp’s background-fetch fallback for the two call sites this exists for). Read moreSource§fn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Source§fn get_versions_with<'a>(
&'a self,
name: &'a PackageName,
freshness: FreshnessSettings,
) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_versions_with<'a>( &'a self, name: &'a PackageName, freshness: FreshnessSettings, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
get_versions, but lets a registry that can obtain
Version::published_at only through an extra request gate that request behind
freshness.enabled instead of always paying for it. Read moreSource§fn get_latest_matching_with_context<'a>(
&'a self,
name: &'a PackageName,
req: &'a VersionReq,
minimum_stability: Option<&'a str>,
) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_latest_matching_with_context<'a>( &'a self, name: &'a PackageName, req: &'a VersionReq, minimum_stability: Option<&'a str>, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
get_latest_matching, but lets a registry whose
“latest matching” selection can be refined by ecosystem-specific manifest state (e.g.
Composer’s minimum-stability field, #424) read it, alongside req. Read moreSource§fn select_latest_matching_with_context(
&self,
versions: &[Box<dyn Version>],
req: &VersionReq,
minimum_stability: Option<&str>,
) -> Option<usize>
fn select_latest_matching_with_context( &self, versions: &[Box<dyn Version>], req: &VersionReq, minimum_stability: Option<&str>, ) -> Option<usize>
select_latest_matching, but lets a registry
whose selection can be refined by ecosystem-specific manifest state (e.g. Composer’s
minimum-stability field, #424) read it, alongside versions and req. See
get_latest_matching_with_context for why
minimum_stability is an opaque per-ecosystem string rather than a shared type. Read more