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: GitRemote
The git remote which we’re going to fetch from.
locked_rev: Revision
The revision which a git source is locked to.
Expected to always be Revision::Locked
after the Git repository is fetched.
source_id: SourceId
The 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: InternedString
The identifier of this source for Cargo’s Git cache directory.
See ident
for more.
gctx: &'gctx GlobalContext
§quiet: bool
Disables 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>
§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>
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