Specify basename, build directory

main
~erin 2023-04-03 00:07:17 -04:00
parent 1e4c33c6d6
commit f3dda40180
Signed by: erin
GPG Key ID: 9A8E308CEFA37A47
2 changed files with 25 additions and 7 deletions

View File

@ -59,6 +59,10 @@ enum Commands {
/// Optional cargo flag
#[arg(long, require_equals = true, num_args = 0..=1, default_value_t = Tag::Debug, default_missing_value = "debug")]
tag: Tag,
/// Basename of the repository
#[arg(long, value_name = "NAME")]
basename: String,
},
}
@ -140,6 +144,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
subcommand,
features,
tag,
basename,
} => {
// Connect to a peer
let remote = format!("{}:{}", args.host, args.port);
@ -165,7 +170,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
profile,
command: test_command,
repository: Url::parse(&repo).unwrap(),
basename: "serde_json".to_string(),
basename,
};
info!("Message UUID: <magenta>{}<//>", &test_message.uuid);

View File

@ -16,6 +16,7 @@ use uuid_simd::UuidExt;
struct HostConfig {
ip: String,
port: u16,
build_directory: Option<String>,
}
#[derive(Serialize, Deserialize, Clone)]
@ -100,7 +101,7 @@ struct Message {
basename: String,
}
async fn build(msg: Message, address: SocketAddr) {
async fn build(msg: Message, address: SocketAddr, dir: String) {
let mut features = String::new();
match msg.command.features {
Some(f) => {
@ -115,14 +116,16 @@ async fn build(msg: Message, address: SocketAddr) {
}
success!(
"Received message from <green>{:?}<//>: <magenta>{}<//>\n<bright-white>git clone {}\n{} {} {} {}\n<//>",
"Received message from <green>{:?}<//>: <magenta>{}<//>\n<bright-white>cd {}\ngit clone {}\ncd {}\n{} {} {} {}\n<//>",
address,
msg.uuid.format_hyphenated(),
dir,
msg.repository,
msg.basename,
msg.command.build_system,
msg.command.subcommand,
msg.command.tag,
features
features,
);
match msg.pre_exec {
@ -162,6 +165,7 @@ async fn process_socket(
mut socket: TcpStream,
address: SocketAddr,
auth: AuthConfig,
dir: String,
salt: SaltString,
argon2: Argon2<'_>,
) {
@ -187,12 +191,13 @@ async fn process_socket(
if auth.authenticate {
match &auth.password {
Some(pass) => {
let directory = dir.clone();
if json
.authenticate(pass.clone(), salt.clone(), argon2.clone())
.await
{
tokio::spawn(async move {
build(json, address).await;
build(json, address, directory).await;
});
}
}
@ -201,7 +206,10 @@ async fn process_socket(
}
}
} else {
build(json, address).await;
let directory = dir.clone();
tokio::spawn(async move {
build(json, address, directory).await;
});
}
}
}
@ -220,10 +228,11 @@ async fn main() -> io::Result<()> {
match listener.accept().await {
Ok((socket, addr)) => {
let auth = config.auth.clone();
let dir = config.host.build_directory.clone().unwrap();
let m_salt = salt.clone();
let m_argon2 = argon2.clone();
tokio::spawn(async move {
process_socket(socket, addr, auth, m_salt, m_argon2).await;
process_socket(socket, addr, auth, dir, m_salt, m_argon2).await;
});
}
Err(e) => error!("couldn't get client: {:?}", e),
@ -236,6 +245,9 @@ async fn configure() -> Config {
default_config.push("forge");
default_config.push("config.toml");
let mut default_build_dir = dirs::home_dir().unwrap();
default_build_dir.push("src");
let config_contents = match fs::read_to_string(&default_config) {
Ok(f) => f,
Err(e) => {
@ -244,6 +256,7 @@ async fn configure() -> Config {
host: HostConfig {
ip: "127.0.0.1".to_string(),
port: 9134,
build_directory: Some(default_build_dir.to_str().unwrap().to_string()),
},
auth: AuthConfig {
authenticate: false,