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:
parent
16a01a42bf
commit
e593191ae2
|
|
@ -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 } => {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue