Skip to main content

GitlabCiRegistry

Struct GitlabCiRegistry 

Source
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

Source

pub fn new(client: Arc<GitlabApiClient>) -> GitlabCiRegistry

Creates a new registry sharing client.

Source

pub fn tag_index(&self) -> Arc<DashMap<PackageName, Arc<TagIndex>>>

Shares this registry’s TagIndex map with crate::formatter::GitlabCiFormatter.

Source

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).

Source

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).

Source

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

Source§

fn clone(&self) -> GitlabCiRegistry

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

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>>

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>>

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>>

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>

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

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>>

Like 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 more
Source§

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>>

Like 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 more
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Downcast to concrete registry type for ecosystem-specific operations
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>>

Like 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 more
Source§

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>>

Like 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 more
Source§

fn select_latest_matching_with_context( &self, versions: &[Box<dyn Version>], req: &VersionReq, minimum_stability: Option<&str>, ) -> Option<usize>

Like 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

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more