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>) -> GitlabCiRegistry
pub fn new(client: Arc<GitlabApiClient>) -> GitlabCiRegistry
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>, DepsError>
pub async fn resolve_component_pin( &self, name: &PackageName, route: &GitlabRoute, pin: &PinStyle, raw: &str, ) -> Result<Option<GitlabCiVersion>, DepsError>
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,
) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_versions<'a>( &'a self, name: &'a PackageName, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
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,
) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_latest_matching<'a>( &'a self, name: &'a PackageName, _req: &'a VersionReq, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
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,
) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Metadata>>, DepsError>> + Send + 'a>>
fn search<'a>( &'a self, _query: &'a str, _limit: usize, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Metadata>>, DepsError>> + Send + 'a>>
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,
) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_versions_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, _freshness: FreshnessSettings, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>
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>,
) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
fn get_latest_matching_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, req: &'a VersionReq, _minimum_stability: Option<&'a str>, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>
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 + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
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 moreAuto Trait Implementations§
impl !RefUnwindSafe for GitlabCiRegistry
impl !UnwindSafe for GitlabCiRegistry
impl Freeze for GitlabCiRegistry
impl Send for GitlabCiRegistry
impl Sync for GitlabCiRegistry
impl Unpin for GitlabCiRegistry
impl UnsafeUnpin for GitlabCiRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more