pub struct GitSource<'gctx> {
remote: GitRemote,
locked_rev: Revision,
source_id: SourceId,
path_source: Option<RecursivePathSource<'gctx>>,
short_id: Option<InternedString>,
ident: InternedString,
gctx: &'gctx GlobalContext,
quiet: bool,
}Expand description
GitSource contains one or more packages gathering from a Git repository.
Under the hood it uses RecursivePathSource to discover packages inside the
repository.
§Filesystem layout
During a successful GitSource download, at least two Git repositories are
created: one is the shared Git database of this remote, and the other is the
Git checkout to a specific revision, which contains the actual files to be
compiled. Multiple checkouts can be cloned from a single Git database.
Those repositories are located at Cargo’s Git cache directory
$CARGO_HOME/git. The file tree of the cache directory roughly looks like:
$CARGO_HOME/git/
├── checkouts/
│ ├── gimli-a0d193bd15a5ed96/
│ │ ├── 8e73ef0/ # Git short ID for a certain revision
│ │ ├── a2a4b78/
│ │ └── e33d1ac/
│ ├── log-c58e1db3de7c154d-shallow/
│ │ └── 11eda98/
└── db/
├── gimli-a0d193bd15a5ed96/
└── log-c58e1db3de7c154d-shallow/For more on Git cache directory, see “Cargo Home” in The Cargo Book.
For more on the directory format <pkg>-<hash>[-shallow], see ident
and ident_shallow.
§Locked to a revision
Once a GitSource is fetched, it will resolve to a specific commit revision.
This is often mentioned as “locked revision” (locked_rev) throughout the
codebase. The revision is written into Cargo.lock. This is essential since
we want to ensure a package can compiles with the same set of files when
a Cargo.lock is present. With the locked_rev provided, GitSource can
precisely fetch the same revision from the Git repository.
Fields§
§remote: GitRemoteThe git remote which we’re going to fetch from.
locked_rev: RevisionThe revision which a git source is locked to.
Expected to always be Revision::Locked after the Git repository is fetched.
source_id: SourceIdThe unique identifier of this source.
path_source: Option<RecursivePathSource<'gctx>>The underlying path source to discover packages inside the Git repository.
This gets set to Some after the git repo has been checked out
(automatically handled via GitSource::block_until_ready).
short_id: Option<InternedString>A short string that uniquely identifies the version of the checkout.
This is typically a 7-character string of the OID hash, automatically increasing in size if it is ambiguous.
This is set to Some after the git repo has been checked out
(automatically handled via GitSource::block_until_ready).
ident: InternedStringThe identifier of this source for Cargo’s Git cache directory.
See ident for more.
gctx: &'gctx GlobalContext§quiet: boolDisables status messages.
Implementations§
Source§impl<'gctx> GitSource<'gctx>
impl<'gctx> GitSource<'gctx>
Sourcepub fn new(
source_id: SourceId,
gctx: &'gctx GlobalContext,
) -> CargoResult<GitSource<'gctx>>
pub fn new( source_id: SourceId, gctx: &'gctx GlobalContext, ) -> CargoResult<GitSource<'gctx>>
Creates a git source for the given SourceId.
Sourcepub fn read_packages(&mut self) -> CargoResult<Vec<Package>>
pub fn read_packages(&mut self) -> CargoResult<Vec<Package>>
Returns the packages discovered by this source. It may fetch the Git repository as well as walk the filesystem if package information haven’t yet updated.
fn mark_used(&self) -> CargoResult<()>
Trait Implementations§
Source§impl<'gctx> Source for GitSource<'gctx>
impl<'gctx> Source for GitSource<'gctx>
Source§fn query(
&mut self,
dep: &Dependency,
kind: QueryKind,
f: &mut dyn FnMut(IndexSummary),
) -> Poll<CargoResult<()>>
fn query( &mut self, dep: &Dependency, kind: QueryKind, f: &mut dyn FnMut(IndexSummary), ) -> Poll<CargoResult<()>>
Source§fn supports_checksums(&self) -> bool
fn supports_checksums(&self) -> bool
IndexSummary items with
checksums listed.Source§fn requires_precise(&self) -> bool
fn requires_precise(&self) -> bool
IndexSummary items with
the precise field in the SourceId listed.Source§fn block_until_ready(&mut self) -> CargoResult<()>
fn block_until_ready(&mut self) -> CargoResult<()>
Source§fn download(&mut self, id: PackageId) -> CargoResult<MaybePackage>
fn download(&mut self, id: PackageId) -> CargoResult<MaybePackage>
Source§fn finish_download(
&mut self,
_id: PackageId,
_data: Vec<u8>,
) -> CargoResult<Package>
fn finish_download( &mut self, _id: PackageId, _data: Vec<u8>, ) -> CargoResult<Package>
.crate file. Read moreSource§fn fingerprint(&self, _pkg: &Package) -> CargoResult<String>
fn fingerprint(&self, _pkg: &Package) -> CargoResult<String>
Source§fn describe(&self) -> String
fn describe(&self) -> String
Source§fn add_to_yanked_whitelist(&mut self, _pkgs: &[PackageId])
fn add_to_yanked_whitelist(&mut self, _pkgs: &[PackageId])
Source§fn is_yanked(&mut self, _pkg: PackageId) -> Poll<CargoResult<bool>>
fn is_yanked(&mut self, _pkg: PackageId) -> Poll<CargoResult<bool>>
Source§fn invalidate_cache(&mut self)
fn invalidate_cache(&mut self)
Source§fn set_quiet(&mut self, quiet: bool)
fn set_quiet(&mut self, quiet: bool)
Source§fn replaced_source_id(&self) -> SourceId
fn replaced_source_id(&self) -> SourceId
SourceId corresponding to this source.Source§fn query_vec(
&mut self,
dep: &Dependency,
kind: QueryKind,
) -> Poll<CargoResult<Vec<IndexSummary>>>
fn query_vec( &mut self, dep: &Dependency, kind: QueryKind, ) -> Poll<CargoResult<Vec<IndexSummary>>>
Source::query as a list of IndexSummary items
when they become available.Source§fn download_now(
self: Box<Self>,
package: PackageId,
gctx: &GlobalContext,
) -> CargoResult<Package>where
Self: Sized,
fn download_now(
self: Box<Self>,
package: PackageId,
gctx: &GlobalContext,
) -> CargoResult<Package>where
Self: Sized,
Source§fn verify(&self, _pkg: PackageId) -> CargoResult<()>
fn verify(&self, _pkg: PackageId) -> CargoResult<()>
Source§fn is_replaced(&self) -> bool
fn is_replaced(&self) -> bool
Auto Trait Implementations§
impl<'gctx> Freeze for GitSource<'gctx>
impl<'gctx> RefUnwindSafe for GitSource<'gctx>
impl<'gctx> !Send for GitSource<'gctx>
impl<'gctx> !Sync for GitSource<'gctx>
impl<'gctx> Unpin for GitSource<'gctx>
impl<'gctx> UnwindSafe for GitSource<'gctx>
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
§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§impl<T> Pointable for T
impl<T> Pointable for T
§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> ErasedDestructor for Twhere
T: 'static,
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: 320 bytes