cli: Automatically remove control socket

Instead of requiring that `--force` be used manually, we check to make
sure the node is not running, and if so, pass `--force` to the node
process.
This commit is contained in:
Alexis Sellier 2023-07-15 12:52:52 +02:00
parent 16a01a42bf
commit e593191ae2
No known key found for this signature in database
2 changed files with 20 additions and 9 deletions

View File

@ -186,14 +186,11 @@ impl Args for Options {
pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> { pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
let profile = ctx.profile()?; let profile = ctx.profile()?;
let mut node = Node::new(profile.socket());
match options.op { match options.op {
Operation::Connect { addr } => { Operation::Connect { addr } => control::connect(&mut node, addr.id, addr.addr)?,
let mut node = Node::new(profile.socket());
control::connect(&mut node, addr.id, addr.addr)?
}
Operation::Events => { Operation::Events => {
let node = Node::new(profile.socket());
events::run(node)?; events::run(node)?;
} }
Operation::Routing { rid, nid, json } => { Operation::Routing { rid, nid, json } => {
@ -202,13 +199,13 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
routing::run(&store, rid, nid, json)?; routing::run(&store, rid, nid, json)?;
} }
Operation::Logs { lines } => control::logs(lines, Some(time::Duration::MAX), &profile)?, Operation::Logs { lines } => control::logs(lines, Some(time::Duration::MAX), &profile)?,
Operation::Start { daemon, options } => control::start(daemon, options, &profile)?, Operation::Start { daemon, options } => {
control::start(node, daemon, options, &profile)?;
}
Operation::Status => { Operation::Status => {
let node = Node::new(profile.socket());
control::status(&node, &profile)?; control::status(&node, &profile)?;
} }
Operation::Stop => { Operation::Stop => {
let node = Node::new(profile.socket());
control::stop(node)?; control::stop(node)?;
} }
Operation::Tracking { mode } => { Operation::Tracking { mode } => {

View File

@ -14,12 +14,26 @@ use radicle::{profile, Profile};
use crate::terminal as term; use crate::terminal as term;
use crate::terminal::Element as _; use crate::terminal::Element as _;
pub fn start(daemon: bool, options: Vec<OsString>, profile: &Profile) -> anyhow::Result<()> { pub fn start(
node: Node,
daemon: bool,
mut options: Vec<OsString>,
profile: &Profile,
) -> anyhow::Result<()> {
if node.is_running() {
term::success!("Node is already running");
return Ok(());
}
// Ask passphrase here, otherwise it'll be a fatal error when running the daemon // Ask passphrase here, otherwise it'll be a fatal error when running the daemon
// without `RAD_PASSPHRASE`. To keep things consistent, we also use this in foreground mode. // without `RAD_PASSPHRASE`. To keep things consistent, we also use this in foreground mode.
let passphrase = term::io::passphrase(profile::env::RAD_PASSPHRASE) let passphrase = term::io::passphrase(profile::env::RAD_PASSPHRASE)
.context(format!("`{}` must be set", profile::env::RAD_PASSPHRASE))?; .context(format!("`{}` must be set", profile::env::RAD_PASSPHRASE))?;
// Since we checked that the node is not running, it's safe to use `--force`
// here.
if !options.contains(&OsString::from("--force")) {
options.push(OsString::from("--force"));
}
if daemon { if daemon {
let log = OpenOptions::new() let log = OpenOptions::new()
.append(true) .append(true)