Skip to content

Commit aaa7ed7

Browse files
committed
Replace env var daemon spawning with hidden run-daemon subcommand
Signed-off-by: Cong Wang <cwang@multikernel.io>
1 parent 3a61ac1 commit aaa7ed7

2 files changed

Lines changed: 27 additions & 19 deletions

File tree

src/daemon.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,10 +388,15 @@ pub fn start_daemon_background(base_path: &Path, storage_path: &Path) -> std::io
388388
// proper fd inheritance control — stdin/stdout/stderr are /dev/null
389389
// so callers that capture output won't block.
390390
let exe = std::env::current_exe()?;
391-
let env_val = format!("{}:{}", base_path.display(), storage_path.display());
392391

393392
Command::new(exe)
394-
.env("_BRANCHFS_DAEMON", env_val)
393+
.args([
394+
"run-daemon",
395+
"--base",
396+
&base_path.to_string_lossy(),
397+
"--storage",
398+
&storage_path.to_string_lossy(),
399+
])
395400
.stdin(Stdio::null())
396401
.stdout(Stdio::null())
397402
.stderr(Stdio::null())

src/main.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ enum Commands {
8888
#[arg(long, default_value = "/var/lib/branchfs")]
8989
storage: PathBuf,
9090
},
91+
92+
/// Internal: run the daemon (used by `mount` to spawn the daemon process)
93+
#[command(hide = true)]
94+
RunDaemon {
95+
#[arg(long)]
96+
base: PathBuf,
97+
98+
#[arg(long)]
99+
storage: PathBuf,
100+
},
91101
}
92102

93103
fn get_socket_path(storage: &Path) -> PathBuf {
@@ -118,23 +128,6 @@ fn get_mount_branch(storage: &Path, mountpoint: &Path) -> Result<String> {
118128

119129
fn main() -> Result<()> {
120130
env_logger::init();
121-
122-
// Re-exec entry point: when spawned as a daemon by start_daemon_background(),
123-
// we skip CLI parsing and run the daemon loop directly.
124-
if let Ok(val) = std::env::var("_BRANCHFS_DAEMON") {
125-
let parts: Vec<&str> = val.splitn(2, ':').collect();
126-
if parts.len() == 2 {
127-
let base = PathBuf::from(parts[0]);
128-
let storage = PathBuf::from(parts[1]);
129-
let daemon = daemon::Daemon::new(base.clone(), storage, base)
130-
.map_err(|e| anyhow::anyhow!("Failed to create daemon: {}", e))?;
131-
daemon
132-
.run()
133-
.map_err(|e| anyhow::anyhow!("Daemon error: {}", e))?;
134-
}
135-
return Ok(());
136-
}
137-
138131
let cli = Cli::parse();
139132

140133
match cli.command {
@@ -328,6 +321,16 @@ fn main() -> Result<()> {
328321
process::exit(1);
329322
}
330323
}
324+
Commands::RunDaemon { base, storage } => {
325+
std::fs::create_dir_all(&storage)?;
326+
let storage = storage.canonicalize()?;
327+
let base = base.canonicalize()?;
328+
329+
let d = daemon::Daemon::new(base.clone(), storage, base)
330+
.map_err(|e| anyhow::anyhow!("Failed to create daemon: {}", e))?;
331+
d.run()
332+
.map_err(|e| anyhow::anyhow!("Daemon error: {}", e))?;
333+
}
331334
}
332335

333336
Ok(())

0 commit comments

Comments
 (0)