pub struct GitSource<'gctx> { /* private fields */ }
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.
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.
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
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> 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