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