pub struct SourceId {
inner: &'static SourceIdInner,
}
Expand description
Unique identifier for a source of packages.
Cargo uniquely identifies packages using PackageId
, a combination of the
package name, version, and the code source. SourceId
exactly represents
the “code source” in PackageId
. See SourceId::hash
to learn what are
taken into account for the uniqueness of a source.
SourceId
is usually associated with an instance of Source
, which is
supposed to provide a SourceId
via Source::source_id
method.
Fields§
§inner: &'static SourceIdInner
Implementations§
Source§impl SourceId
impl SourceId
Sourcefn new(kind: SourceKind, url: Url, key: Option<KeyOf>) -> CargoResult<SourceId>
fn new(kind: SourceKind, url: Url, key: Option<KeyOf>) -> CargoResult<SourceId>
Creates a SourceId
object from the kind and URL.
The canonical url will be calculated, but the precise field will not
Sourcefn wrap(inner: SourceIdInner) -> SourceId
fn wrap(inner: SourceIdInner) -> SourceId
Interns the value and returns the wrapped type.
fn remote_source_kind(url: &Url) -> SourceKind
Sourcepub fn from_url(string: &str) -> CargoResult<SourceId>
pub fn from_url(string: &str) -> CargoResult<SourceId>
Parses a source URL and returns the corresponding ID.
§Example
use cargo::core::SourceId;
SourceId::from_url("git+https://github.com/alexcrichton/\
libssh2-static-sys#80e71a3021618eb05\
656c58fb7c5ef5f12bc747f");
Sourcepub fn as_url(&self) -> SourceIdAsUrl<'_>
pub fn as_url(&self) -> SourceIdAsUrl<'_>
A view of the SourceId
that can be Display
ed as a URL.
Sourcepub fn as_encoded_url(&self) -> SourceIdAsUrl<'_>
pub fn as_encoded_url(&self) -> SourceIdAsUrl<'_>
Like Self::as_url
but with URL parameters encoded.
Sourcepub fn for_path(path: &Path) -> CargoResult<SourceId>
pub fn for_path(path: &Path) -> CargoResult<SourceId>
Creates a SourceId
from a filesystem path.
path
: an absolute path.
Sourcepub fn for_git(url: &Url, reference: GitReference) -> CargoResult<SourceId>
pub fn for_git(url: &Url, reference: GitReference) -> CargoResult<SourceId>
Creates a SourceId
from a Git reference.
Sourcepub fn for_registry(url: &Url) -> CargoResult<SourceId>
pub fn for_registry(url: &Url) -> CargoResult<SourceId>
Creates a SourceId
from a remote registry URL when the registry name
cannot be determined, e.g. a user passes --index
directly from CLI.
Use SourceId::for_alt_registry
if a name can provided, which
generates better messages for cargo.
Sourcepub fn for_alt_registry(url: &Url, key: &str) -> CargoResult<SourceId>
pub fn for_alt_registry(url: &Url, key: &str) -> CargoResult<SourceId>
Creates a SourceId
for a remote registry from the [registries]
table or crates.io.
Sourcepub fn for_source_replacement_registry(
url: &Url,
key: &str,
) -> CargoResult<SourceId>
pub fn for_source_replacement_registry( url: &Url, key: &str, ) -> CargoResult<SourceId>
Creates a SourceId
for a remote registry from the [source]
replacement table.
Sourcepub fn for_local_registry(path: &Path) -> CargoResult<SourceId>
pub fn for_local_registry(path: &Path) -> CargoResult<SourceId>
Creates a SourceId
from a local registry path.
Sourcepub fn for_directory(path: &Path) -> CargoResult<SourceId>
pub fn for_directory(path: &Path) -> CargoResult<SourceId>
Creates a SourceId
from a directory path.
Sourcepub fn crates_io(gctx: &GlobalContext) -> CargoResult<SourceId>
pub fn crates_io(gctx: &GlobalContext) -> CargoResult<SourceId>
Returns the SourceId
corresponding to the main repository.
This is the main cargo registry by default, but it can be overridden in
a .cargo/config.toml
.
Sourcepub fn crates_io_maybe_sparse_http(
gctx: &GlobalContext,
) -> CargoResult<SourceId>
pub fn crates_io_maybe_sparse_http( gctx: &GlobalContext, ) -> CargoResult<SourceId>
Returns the SourceId
corresponding to the main repository, using the
sparse HTTP index if allowed.
Sourcepub fn crates_io_is_sparse(gctx: &GlobalContext) -> CargoResult<bool>
pub fn crates_io_is_sparse(gctx: &GlobalContext) -> CargoResult<bool>
Returns whether to access crates.io over the sparse protocol.
Sourcepub fn alt_registry(gctx: &GlobalContext, key: &str) -> CargoResult<SourceId>
pub fn alt_registry(gctx: &GlobalContext, key: &str) -> CargoResult<SourceId>
Gets the SourceId
associated with given name of the remote registry.
Sourcepub fn canonical_url(&self) -> &CanonicalUrl
pub fn canonical_url(&self) -> &CanonicalUrl
Gets the canonical URL of this source, used for internal comparison purposes.
Sourcepub fn display_index(self) -> String
pub fn display_index(self) -> String
Displays the text “crates.io index” for Cargo shell status output.
Sourcepub fn display_registry_name(self) -> String
pub fn display_registry_name(self) -> String
Displays the name of a registry if it has one. Otherwise just the URL.
Sourcepub fn alt_registry_key(&self) -> Option<&str>
pub fn alt_registry_key(&self) -> Option<&str>
Gets the name of the remote registry as defined in the [registries]
table,
or the built-in crates-io
key.
Sourcepub fn local_path(self) -> Option<PathBuf>
pub fn local_path(self) -> Option<PathBuf>
Returns the local path if this is a path dependency.
pub fn kind(&self) -> &SourceKind
Sourcepub fn is_registry(self) -> bool
pub fn is_registry(self) -> bool
Returns true
if this source is from a registry (either local or not).
Sourcepub fn is_remote_registry(self) -> bool
pub fn is_remote_registry(self) -> bool
Returns true
if this source is a “remote” registry.
“remote” may also mean a file URL to a git index, so it is not
necessarily “remote”. This just means it is not local-registry
.
Sourcepub fn load<'a>(
self,
gctx: &'a GlobalContext,
yanked_whitelist: &HashSet<PackageId>,
) -> CargoResult<Box<dyn Source + 'a>>
pub fn load<'a>( self, gctx: &'a GlobalContext, yanked_whitelist: &HashSet<PackageId>, ) -> CargoResult<Box<dyn Source + 'a>>
Creates an implementation of Source
corresponding to this ID.
yanked_whitelist
— Packages allowed to be used, even if they are yanked.
Sourcepub fn git_reference(self) -> Option<&'static GitReference>
pub fn git_reference(self) -> Option<&'static GitReference>
Gets the Git reference if this is a git source, otherwise None
.
Sourcepub fn has_precise(self) -> bool
pub fn has_precise(self) -> bool
Check if the precise data field has bean set
Sourcepub fn has_locked_precise(self) -> bool
pub fn has_locked_precise(self) -> bool
Check if the precise data field has bean set to “locked”
Sourcepub fn has_same_precise_as(self, other: Self) -> bool
pub fn has_same_precise_as(self, other: Self) -> bool
Check if two sources have the same precise data field
Sourcepub fn precise_registry_version(self, pkg: &str) -> Option<(&Version, &Version)>
pub fn precise_registry_version(self, pkg: &str) -> Option<(&Version, &Version)>
Check if the precise data field stores information for this name
from a call to SourceId::with_precise_registry_version
.
If so return the version currently in the lock file and the version to be updated to.
pub fn precise_git_fragment(self) -> Option<&'static str>
Sourcepub fn with_git_precise(self, fragment: Option<String>) -> SourceId
pub fn with_git_precise(self, fragment: Option<String>) -> SourceId
Creates a new SourceId
from this source with the given precise
.
Sourcepub fn without_precise(self) -> SourceId
pub fn without_precise(self) -> SourceId
Creates a new SourceId
from this source without a precise
.
Sourcepub fn with_locked_precise(self) -> SourceId
pub fn with_locked_precise(self) -> SourceId
Creates a new SourceId
from this source without a precise
.
Sourcepub fn with_precise_from(self, v: Self) -> SourceId
pub fn with_precise_from(self, v: Self) -> SourceId
Creates a new SourceId
from this source with the precise
from some other SourceId
.
fn with_precise(self, precise: &Option<Precise>) -> SourceId
Sourcepub fn with_precise_registry_version(
self,
name: InternedString,
version: Version,
precise: &str,
) -> CargoResult<SourceId>
pub fn with_precise_registry_version( self, name: InternedString, version: Version, precise: &str, ) -> CargoResult<SourceId>
When updating a lock file on a version using cargo update --precise
the requested version is stored in the precise field.
On a registry dependency we also need to keep track of the package that
should be updated and even which of the versions should be updated.
All of this gets encoded in the precise field using this method.
The data can be read with SourceId::precise_registry_version
Sourcepub fn is_crates_io(self) -> bool
pub fn is_crates_io(self) -> bool
Returns true
if the remote registry is the standard https://crates.io.
Sourcepub fn stable_hash<S: Hasher>(self, workspace: &Path, into: &mut S)
pub fn stable_hash<S: Hasher>(self, workspace: &Path, into: &mut S)
Hashes self
.
For paths, remove the workspace prefix so the same source will give the same hash in different locations, helping reproducible builds.
pub fn full_eq(self, other: SourceId) -> bool
pub fn full_hash<S: Hasher>(self, into: &mut S)
Trait Implementations§
Source§impl<'de> Deserialize<'de> for SourceId
impl<'de> Deserialize<'de> for SourceId
Source§fn deserialize<D>(d: D) -> Result<SourceId, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(d: D) -> Result<SourceId, D::Error>where
D: Deserializer<'de>,
Source§impl Hash for SourceId
impl Hash for SourceId
The hash of SourceId
is used in the name of some Cargo folders, so shouldn’t
vary. as_str
gives the serialisation of a url (which has a spec) and so
insulates against possible changes in how the url crate does hashing.
Source§impl Ord for SourceId
impl Ord for SourceId
Source§impl PartialOrd for SourceId
impl PartialOrd for SourceId
impl Copy for SourceId
impl Eq for SourceId
Auto Trait Implementations§
impl Freeze for SourceId
impl RefUnwindSafe for SourceId
impl Send for SourceId
impl Sync for SourceId
impl Unpin for SourceId
impl UnwindSafe for SourceId
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<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§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>
§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 8 bytes