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: GitRemoteThe git remote which we’re going to fetch from.
manifest_reference: GitReferenceThe 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: SourceIdThe unique identifier of this source.
path_source: Option<PathSource<'cfg>>The underlying path source to discover packages inside the Git repository.
ident: StringThe identifier of this source for Cargo’s Git cache directory.
See ident for more.
config: &'cfg Config§quiet: boolDisables 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