use std::path::PathBuf;
use crate::config::DEFAULT_MONOCORE_HOME;
use super::MONOCORE_HOME_ENV_VAR;
pub const MONOCORE_SUBDIR: &str = ".monocore";
pub const OCI_SUBDIR: &str = "oci";
pub const OCI_LAYER_SUBDIR: &str = "layer";
pub const OCI_REPO_SUBDIR: &str = "repo";
pub const OCI_INDEX_FILENAME: &str = "index.json";
pub const OCI_MANIFEST_FILENAME: &str = "manifest.json";
pub const OCI_CONFIG_FILENAME: &str = "config.json";
pub const ROOTFS_SUBDIR: &str = "rootfs";
pub const REFERENCE_SUBDIR: &str = "reference";
pub const SERVICE_SUBDIR: &str = "service";
pub const MERGED_SUBDIR: &str = "merged";
pub const STATE_SUBDIR: &str = "run";
pub const LOG_SUBDIR: &str = "log";
lazy_static::lazy_static! {
pub static ref MONOCORE_OCI_DIR: PathBuf = monocore_home_path().join(OCI_SUBDIR);
pub static ref MONOCORE_ROOTFS_DIR: PathBuf = monocore_home_path().join(ROOTFS_SUBDIR);
pub static ref MONOCORE_SERVICE_DIR: PathBuf = monocore_home_path().join(SERVICE_SUBDIR);
pub static ref MONOCORE_STATE_DIR: PathBuf = monocore_home_path().join(STATE_SUBDIR);
pub static ref MONOCORE_LOG_DIR: PathBuf = monocore_home_path().join(LOG_SUBDIR);
}
pub fn monocore_home_path() -> PathBuf {
if let Ok(monocore_home) = std::env::var(MONOCORE_HOME_ENV_VAR) {
PathBuf::from(monocore_home)
} else {
DEFAULT_MONOCORE_HOME.to_owned()
}
}
pub fn paths_overlap(path1: &str, path2: &str) -> bool {
let path1 = if path1.ends_with('/') {
path1.to_string()
} else {
format!("{}/", path1)
};
let path2 = if path2.ends_with('/') {
path2.to_string()
} else {
format!("{}/", path2)
};
path1.starts_with(&path2) || path2.starts_with(&path1)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_paths_overlap() {
assert!(paths_overlap("/data", "/data"));
assert!(paths_overlap("/data", "/data/app"));
assert!(paths_overlap("/data/app", "/data"));
assert!(paths_overlap("/data/app/logs", "/data/app"));
assert!(!paths_overlap("/data", "/database"));
assert!(!paths_overlap("/var/log", "/var/lib"));
assert!(!paths_overlap("/data/app1", "/data/app2"));
assert!(!paths_overlap("/data/app/logs", "/data/web/logs"));
}
}