pub struct GitSource<'cfg> {
remote: GitRemote,
manifest_reference: GitReference,
locked_rev: Option<Oid>,
source_id: SourceId,
path_source: Option<PathSource<'cfg>>,
ident: String,
config: &'cfg Config,
quiet: bool,
}
Expand description
GitSource
contains one or more packages gathering from a Git repository.
Under the hood it uses PathSource
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.
manifest_reference: GitReference
The Git reference from the manifest file.
locked_rev: Option<Oid>
The revision which a git source is locked to. This is expected to be set after the Git repository is fetched.
source_id: SourceId
The unique identifier of this source.
path_source: Option<PathSource<'cfg>>
The underlying path source to discover packages inside the Git repository.
ident: String
The identifier of this source for Cargo’s Git cache directory.
See ident
for more.
config: &'cfg Config
§quiet: bool
Disables status messages.
Implementations§
source§impl<'cfg> GitSource<'cfg>
impl<'cfg> GitSource<'cfg>
sourcepub fn new(
source_id: SourceId,
config: &'cfg Config
) -> CargoResult<GitSource<'cfg>>
pub fn new( source_id: SourceId, config: &'cfg Config ) -> CargoResult<GitSource<'cfg>>
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.
Trait Implementations§
source§impl<'cfg> Source for GitSource<'cfg>
impl<'cfg> Source for GitSource<'cfg>
source§fn query(
&mut self,
dep: &Dependency,
kind: QueryKind,
f: &mut dyn FnMut(Summary)
) -> Poll<CargoResult<()>>
fn query( &mut self, dep: &Dependency, kind: QueryKind, f: &mut dyn FnMut(Summary) ) -> Poll<CargoResult<()>>
source§fn supports_checksums(&self) -> bool
fn supports_checksums(&self) -> bool
Summary
items with
checksums listed.source§fn requires_precise(&self) -> bool
fn requires_precise(&self) -> bool
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<Summary>>>
fn query_vec( &mut self, dep: &Dependency, kind: QueryKind ) -> Poll<CargoResult<Vec<Summary>>>
Source::query
as a list of Summary
items
when they become available.source§fn download_now(
self: Box<Self>,
package: PackageId,
config: &Config
) -> CargoResult<Package>where
Self: Sized,
fn download_now( self: Box<Self>, package: PackageId, config: &Config ) -> 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<'cfg> !RefUnwindSafe for GitSource<'cfg>
impl<'cfg> !Send for GitSource<'cfg>
impl<'cfg> !Sync for GitSource<'cfg>
impl<'cfg> Unpin for GitSource<'cfg>
impl<'cfg> !UnwindSafe for GitSource<'cfg>
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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§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>,
source§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: 256 bytes