From: Ian Jackson Date: Sun, 22 Nov 2020 11:47:38 +0000 (+0000) Subject: rationalised directory config X-Git-Tag: otter-0.2.0~402 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=05418392495c7540c370e37c64cbf9e68cc3716c;p=otter.git rationalised directory config Signed-off-by: Ian Jackson --- diff --git a/server.toml b/server.toml index b6ae80d3..fcdc631c 100644 --- a/server.toml +++ b/server.toml @@ -10,7 +10,8 @@ public_url = "http://localhost:8000" #sse_wildcard_url = "http://*.sse.localhost:8000" -save_directory = "/home/rustcargo/Rustup/Game/server" +save_dir = "/home/rustcargo/Rustup/Game/server" +command_socket = "/home/rustcargo/Rustup/Game/server/command.socket" template_dir = "/home/ian/Rustup/Game/server/templates" bundled_sources = "/home/rustcargo/Rustup/Game/server/target/bundled-sources" wasm_dir = "/home/rustcargo/Rustup/Game/server/target/packed-wasm" diff --git a/src/accounts.rs b/src/accounts.rs index b0239a10..4c4743d5 100644 --- a/src/accounts.rs +++ b/src/accounts.rs @@ -402,7 +402,7 @@ impl AccountsGuard { //---------- load/save ---------- fn save_path() -> String { - format!("{}/{}", config().save_directory, &ACCOUNTS_FILE) + format!("{}/{}", config().save_dir, &ACCOUNTS_FILE) } #[throws(StartupError)] diff --git a/src/config.rs b/src/config.rs index 628898cc..1ef852b9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -12,15 +12,10 @@ pub const EXIT_DISASTER : i32 = 16; pub const DEFAULT_CONFIG_DIR : &str = "/etc/otter"; pub const DEFAULT_CONFIG_LEAFNAME : &str = "server.toml"; -const DEFAULT_SAVE_DIRECTORY : &str = "save"; -const DEFAULT_COMMAND_SOCKET : &str = "command.socket"; // in save dir -const DEFAULT_TEMPLATE_DIR : &str = "templates"; -const DEFAULT_LIBRARY_DIR : &str = "library"; -const DEFAULT_WASM_DIR : &str = "target/packed-wasm"; - #[derive(Deserialize,Debug,Clone)] pub struct ServerConfigSpec { - pub save_directory: Option, + pub base_dir: Option, + pub save_dir: Option, pub command_socket: Option, pub debug: Option, pub http_port: Option, @@ -36,7 +31,7 @@ pub struct ServerConfigSpec { #[derive(Debug,Clone)] pub struct ServerConfig { - pub save_directory: String, + pub save_dir: String, pub command_socket: String, pub debug: bool, pub http_port: Option, @@ -55,20 +50,30 @@ impl TryFrom for ServerConfig { #[throws(Self::Error)] fn try_from(spec: ServerConfigSpec) -> ServerConfig { let ServerConfigSpec { - save_directory, command_socket, debug, + base_dir, save_dir, command_socket, debug, http_port, public_url, sse_wildcard_url, rocket_workers, template_dir, wasm_dir, log, bundled_sources, shapelibs, } = spec; - let save_directory = save_directory - .unwrap_or_else(|| DEFAULT_SAVE_DIRECTORY.to_owned()); + let defpath = |specd: Option, leaf: &str| -> String { + specd.unwrap_or_else(|| match &base_dir { + Some(base) => format!("{}/{}", &base, &leaf), + None => leaf.to_owned(), + }) + }; + + let save_dir = defpath(save_dir, "save" ); + let command_socket = defpath(command_socket, "var/command.socket"); + let template_dir = defpath(template_dir, "assets" ); + let wasm_dir = defpath(wasm_dir, "assets" ); + let bundled_sources = defpath(bundled_sources, "bundled-sources" ); + const DEFAULT_LIBRARY_GLOB : &str = "library/*.toml"; - let mut command_socket = command_socket - .unwrap_or_else(|| DEFAULT_COMMAND_SOCKET.to_owned()); - if !command_socket.starts_with('/') { - command_socket = format!("{}/{}", save_directory, command_socket); - } + let shapelibs = shapelibs.unwrap_or_else(||{ + let glob = defpath(None, DEFAULT_LIBRARY_GLOB); + vec![ shapelib::Config1::PathGlob(glob) ] + }); let public_url = public_url .trim_end_matches('/') @@ -88,9 +93,6 @@ impl TryFrom for ServerConfig { let rocket_workers = rocket_workers.unwrap_or( if debug { 20 } else { 1000 }); - let template_dir = template_dir - .unwrap_or_else(|| DEFAULT_TEMPLATE_DIR.to_owned()); - let log = { use toml::Value::Table; match log { @@ -106,18 +108,8 @@ impl TryFrom for ServerConfig { let log = LogSpecification::from_toml(&log) .context("log specification")?; - let bundled_sources = bundled_sources - .unwrap_or_else(|| save_directory.clone()); - - let shapelibs = shapelibs.unwrap_or_else( - ||vec![ shapelib::Config1::PathGlob( - format!("{}/*.toml", DEFAULT_LIBRARY_DIR) - )]); - - let wasm_dir = wasm_dir.unwrap_or_else(|| DEFAULT_WASM_DIR.to_owned()); - ServerConfig { - save_directory, command_socket, debug, + save_dir, command_socket, debug, http_port, public_url, sse_wildcard_url, rocket_workers, template_dir, wasm_dir, log, bundled_sources, shapelibs, diff --git a/src/global.rs b/src/global.rs index 1fda6547..c2e6a0c7 100644 --- a/src/global.rs +++ b/src/global.rs @@ -796,7 +796,7 @@ enum SavefilenameParseResult { } fn savefilename(name: &InstanceName, prefix: &str, suffix: &str) -> String { - [ config().save_directory.as_str(), &"/", prefix ] + [ config().save_dir.as_str(), &"/", prefix ] .iter().map(Deref::deref) .chain(iter::once( name.to_string().as_str() )) .chain([ suffix ].iter().map(Deref::deref)) @@ -908,7 +908,7 @@ impl InstanceGuard<'_> { let mut st = GLOBAL.save_area_lock.lock().unwrap(); let st = &mut *st; if st.is_none() { - let lockfile = format!("{}/lock", config().save_directory); + let lockfile = format!("{}/lock", config().save_dir); *st = Some((||{ let file = File::create(&lockfile).context("open")?; file.try_lock_exclusive().context("lock")?; @@ -1025,7 +1025,7 @@ pub fn load_games(accounts: &mut AccountsGuard, use AFState::*; use SavefilenameParseResult::*; let mut a_leaves = HashMap::new(); - for de in fs::read_dir(&config().save_directory)? { + for de in fs::read_dir(&config().save_dir)? { let de = de?; let leaf = de.file_name(); (||{