Add `rad-clone` initial sketch

Signed-off-by: Alexis Sellier <alexis@radicle.xyz>
This commit is contained in:
Alexis Sellier 2022-10-03 11:50:43 +02:00
parent c8bff35229
commit 5b673c7440
No known key found for this signature in database
3 changed files with 31 additions and 1 deletions

View File

@ -32,3 +32,7 @@ path = "src/rad-push.rs"
[[bin]]
name = "rad-agent"
path = "src/rad-agent.rs"
[[bin]]
name = "rad-clone"
path = "src/rad-clone.rs"

View File

@ -0,0 +1,25 @@
use std::env;
use std::path::Path;
use std::str::FromStr;
use radicle::identity::Id;
fn main() -> anyhow::Result<()> {
let cwd = Path::new(".").canonicalize()?;
let profile = radicle::Profile::load()?;
if let Some(id) = env::args().nth(1) {
let id = Id::from_str(&id)?;
let node = profile.node()?;
let repo = radicle::rad::clone(id, &cwd, &profile.signer, &profile.storage, &node)?;
println!(
"ok: project {id} cloned into `{}`",
repo.workdir().unwrap().display()
);
} else {
anyhow::bail!("Error: a project id must be specified");
}
Ok(())
}

View File

@ -215,6 +215,7 @@ pub fn clone<P: AsRef<Path>, G: Signer, S: storage::WriteStorage, H: node::Handl
storage: &S,
handle: &H,
) -> Result<git2::Repository, CloneError> {
let _ = handle.track(&proj)?;
let _ = handle.fetch(&proj)?;
let _ = fork(proj, signer, storage)?;
let working = checkout(proj, signer.public_key(), path, storage)?;
@ -276,7 +277,7 @@ pub fn checkout<P: AsRef<Path>, S: storage::ReadStorage>(
let mut opts = git2::RepositoryInitOptions::new();
opts.no_reinit(true).description(&project.description);
let repo = git2::Repository::init_opts(path, &opts)?;
let repo = git2::Repository::init_opts(path.as_ref().join(&project.name), &opts)?;
let url = storage.url(&proj);
// Configure and fetch all refs from remote.