node: Cleanup a few things
Signed-off-by: Alexis Sellier <self@cloudhead.io>
This commit is contained in:
parent
64cec32ac6
commit
3e173a18ab
|
|
@ -1,6 +1,8 @@
|
||||||
|
use std::path::Path;
|
||||||
use std::{ffi::OsString, fmt, io, str::FromStr};
|
use std::{ffi::OsString, fmt, io, str::FromStr};
|
||||||
|
|
||||||
use nonempty::NonEmpty;
|
use nonempty::NonEmpty;
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
use radicle_git_ext::Oid;
|
use radicle_git_ext::Oid;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
@ -8,6 +10,8 @@ use thiserror::Error;
|
||||||
use crate::crypto;
|
use crate::crypto;
|
||||||
use crate::hash;
|
use crate::hash;
|
||||||
|
|
||||||
|
pub static IDENTITY_PATH: Lazy<&Path> = Lazy::new(|| Path::new("Radicle.toml"));
|
||||||
|
|
||||||
/// A user's identifier is simply their public key.
|
/// A user's identifier is simply their public key.
|
||||||
pub type UserId = crypto::PublicKey;
|
pub type UserId = crypto::PublicKey;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
use std::path::Path;
|
|
||||||
use std::{fs, io};
|
use std::{fs, io};
|
||||||
|
|
||||||
use nonempty::NonEmpty;
|
use nonempty::NonEmpty;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::identity;
|
|
||||||
use crate::identity::{ProjId, UserId};
|
use crate::identity::{ProjId, UserId};
|
||||||
|
use crate::{identity, storage};
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
pub enum InitError {
|
pub enum InitError {
|
||||||
|
|
@ -55,9 +54,8 @@ pub fn init(
|
||||||
.signature()
|
.signature()
|
||||||
.or_else(|_| git2::Signature::now("anonymous", "anonymous@anonymous.xyz"))?;
|
.or_else(|_| git2::Signature::now("anonymous", "anonymous@anonymous.xyz"))?;
|
||||||
|
|
||||||
let base = repo.workdir().ok_or(InitError::BareRepo)?;
|
let filename = *identity::IDENTITY_PATH;
|
||||||
let filename = Path::new("Project.toml");
|
let path = repo.workdir().ok_or(InitError::BareRepo)?.join(filename);
|
||||||
let path = base.join(filename);
|
|
||||||
let file = fs::OpenOptions::new()
|
let file = fs::OpenOptions::new()
|
||||||
.create_new(true)
|
.create_new(true)
|
||||||
.write(true)
|
.write(true)
|
||||||
|
|
@ -70,7 +68,7 @@ pub fn init(
|
||||||
let tree_id = index.write_tree()?;
|
let tree_id = index.write_tree()?;
|
||||||
let tree = repo.find_tree(tree_id)?;
|
let tree = repo.find_tree(tree_id)?;
|
||||||
let _oid = repo.commit(
|
let _oid = repo.commit(
|
||||||
Some("refs/heads/rad/id"),
|
Some(storage::git::RAD_ID_REF.as_str()),
|
||||||
&sig,
|
&sig,
|
||||||
&sig,
|
&sig,
|
||||||
"Initialize Radicle",
|
"Initialize Radicle",
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ pub use radicle_git_ext::Oid;
|
||||||
|
|
||||||
use crate::collections::HashMap;
|
use crate::collections::HashMap;
|
||||||
use crate::git;
|
use crate::git;
|
||||||
use crate::identity;
|
|
||||||
use crate::identity::{ProjId, UserId};
|
use crate::identity::{ProjId, UserId};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
|
|
@ -18,11 +17,10 @@ use super::{
|
||||||
WriteStorage,
|
WriteStorage,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub static RAD_ROOT_GLOB: Lazy<refspec::PatternString> =
|
pub static RAD_ID_REF: Lazy<refspec::PatternString> =
|
||||||
Lazy::new(|| refspec::pattern!("refs/namespaces/*/refs/rad/root"));
|
Lazy::new(|| refspec::pattern!("refs/heads/rad/id"));
|
||||||
pub static NAMESPACES_GLOB: Lazy<refspec::PatternString> =
|
pub static NAMESPACES_GLOB: Lazy<refspec::PatternString> =
|
||||||
Lazy::new(|| refspec::pattern!("refs/namespaces/*"));
|
Lazy::new(|| refspec::pattern!("refs/namespaces/*"));
|
||||||
pub static IDENTITY_PATH: Lazy<&Path> = Lazy::new(|| Path::new(".rad/identity.toml"));
|
|
||||||
|
|
||||||
pub struct Storage {
|
pub struct Storage {
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
|
|
@ -94,27 +92,6 @@ impl Storage {
|
||||||
}
|
}
|
||||||
Ok(projects)
|
Ok(projects)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create(
|
|
||||||
&self,
|
|
||||||
repo: &git2::Repository,
|
|
||||||
identity: impl Into<identity::Doc>,
|
|
||||||
) -> Result<(ProjId, Oid), Error> {
|
|
||||||
let doc = identity.into();
|
|
||||||
let file = fs::OpenOptions::new()
|
|
||||||
.create_new(true)
|
|
||||||
.write(true)
|
|
||||||
.open(*IDENTITY_PATH)?;
|
|
||||||
let id = doc.write(file)?;
|
|
||||||
let ref_name = RAD_ROOT_GLOB.replace('*', &id.encode());
|
|
||||||
let oid = repo.head()?.target().ok_or(Error::InvalidHead)?;
|
|
||||||
let repository = self.repository(&id)?;
|
|
||||||
let _reference = repository.backend.reference(&ref_name, oid, false, "")?;
|
|
||||||
|
|
||||||
// TODO: Push project to monorepo.
|
|
||||||
|
|
||||||
Ok((id, oid.into()))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Repository {
|
pub struct Repository {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue