radicle: use `git fetch` over libigt2 in checkout
Similarly to pushing using the `file://` protocol and `libgit2`, fetching will be slow – so instead use `git fetch` directly to perform the `checkout`.
This commit is contained in:
parent
a9fa31e5e6
commit
ce8ac663f7
|
|
@ -220,8 +220,12 @@ pub fn fork<G: Signer, S: storage::WriteStorage>(
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
pub enum CheckoutError {
|
pub enum CheckoutError {
|
||||||
|
#[error(
|
||||||
|
"the Git repository found at {path:?} is a bare repository, expected a working directory"
|
||||||
|
)]
|
||||||
|
BareRepository { path: PathBuf },
|
||||||
#[error("failed to fetch to working copy")]
|
#[error("failed to fetch to working copy")]
|
||||||
Fetch(#[source] git2::Error),
|
Fetch(#[source] std::io::Error),
|
||||||
#[error("git: {0}")]
|
#[error("git: {0}")]
|
||||||
Git(#[from] git2::Error),
|
Git(#[from] git2::Error),
|
||||||
#[error("payload: {0}")]
|
#[error("payload: {0}")]
|
||||||
|
|
@ -260,7 +264,35 @@ pub fn checkout<P: AsRef<Path>, S: storage::ReadStorage>(
|
||||||
&url,
|
&url,
|
||||||
&url.clone().with_namespace(*remote),
|
&url.clone().with_namespace(*remote),
|
||||||
)?;
|
)?;
|
||||||
git::fetch(&repo, &REMOTE_NAME).map_err(CheckoutError::Fetch)?;
|
let fetchspec = git::Refspec {
|
||||||
|
src: git::refspec::pattern!("refs/heads/*"),
|
||||||
|
dst: git::Qualified::from(git::lit::refs_remotes(&*REMOTE_NAME))
|
||||||
|
.to_pattern(git::refspec::STAR)
|
||||||
|
.into_patternstring(),
|
||||||
|
force: false,
|
||||||
|
};
|
||||||
|
let stored = storage.repository(proj)?;
|
||||||
|
let workdir = repo.workdir().ok_or(CheckoutError::BareRepository {
|
||||||
|
path: repo.path().to_path_buf(),
|
||||||
|
})?;
|
||||||
|
|
||||||
|
git::run::<_, _, &str, &str>(
|
||||||
|
workdir,
|
||||||
|
[
|
||||||
|
"fetch",
|
||||||
|
&format!(
|
||||||
|
"{}",
|
||||||
|
stored
|
||||||
|
.path()
|
||||||
|
.canonicalize()
|
||||||
|
.map_err(CheckoutError::Fetch)?
|
||||||
|
.display()
|
||||||
|
),
|
||||||
|
&fetchspec.to_string(),
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
)
|
||||||
|
.map_err(CheckoutError::Fetch)?;
|
||||||
|
|
||||||
{
|
{
|
||||||
// Setup default branch.
|
// Setup default branch.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue