diff --git a/.env.seed b/.env.seed
index 47c0bec7..45d56d4d 100644
--- a/.env.seed
+++ b/.env.seed
@@ -1,2 +1,2 @@
RADICLE_DOMAIN=seed.radicle.xyz
-RADICLE_NODE_OPTIONS=--tracking-policy track --tracking-scope all
+RADICLE_NODE_OPTIONS=--tracking-policy track --tracking-scope all --force
diff --git a/radicle-node/src/main.rs b/radicle-node/src/main.rs
index 55774f16..7bfb55d2 100644
--- a/radicle-node/src/main.rs
+++ b/radicle-node/src/main.rs
@@ -1,4 +1,4 @@
-use std::{net, process};
+use std::{fs, net, process};
use anyhow::{anyhow, Context as _};
use crossbeam_channel as chan;
@@ -26,6 +26,7 @@ Options
--git-daemon
Address to bind git-daemon to (default 0.0.0.0:9418)
--tracking-policy (track|block) Default tracking policy
--tracking-scope (trusted|all) Default scope for tracking policies
+ --force Force start even if an existing control socket is found
--help Print help
--listen Address to listen on
@@ -38,6 +39,7 @@ struct Options {
daemon: Option,
limits: service::config::Limits,
listen: Vec,
+ force: bool,
tracking_policy: Policy,
tracking_scope: Scope,
}
@@ -54,6 +56,7 @@ impl Options {
let mut daemon = None;
let mut tracking_policy = Policy::default();
let mut tracking_scope = Scope::default();
+ let mut force = false;
while let Some(arg) = parser.next()? {
match arg {
@@ -65,6 +68,9 @@ impl Options {
let addr = parser.value()?.parse()?;
external_addresses.push(addr);
}
+ Long("force") => {
+ force = true;
+ }
Long("git-daemon") => {
let addr = parser.value()?.parse()?;
daemon = Some(addr);
@@ -113,6 +119,7 @@ impl Options {
connect,
daemon,
external_addresses,
+ force,
limits,
listen,
tracking_policy,
@@ -155,6 +162,10 @@ fn execute() -> anyhow::Result<()> {
let (notify, signals) = chan::bounded(1);
signals::install(notify)?;
+ if options.force {
+ log::debug!(target: "node", "Removing existing control socket..");
+ fs::remove_file(home.socket()).ok();
+ }
Runtime::init(home, config, options.listen, proxy, daemon, signals, signer)?.run()?;
Ok(())