plain_info.rs
79 lines
| 2.2 KiB
| application/rls-services+xml
|
RustLexer
Arseniy Alekseyev
|
r50408 | use crate::utils::files::get_bytes_from_os_string; | ||
use std::env; | ||||
/// Keeps information on whether plain mode is active. | ||||
/// | ||||
/// Plain mode means that all configuration variables which affect | ||||
/// the behavior and output of Mercurial should be | ||||
/// ignored. Additionally, the output should be stable, | ||||
/// reproducible and suitable for use in scripts or applications. | ||||
/// | ||||
/// The only way to trigger plain mode is by setting either the | ||||
/// `HGPLAIN' or `HGPLAINEXCEPT' environment variables. | ||||
/// | ||||
/// The return value can either be | ||||
/// - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT | ||||
/// - False if feature is disabled by default and not included in HGPLAIN | ||||
/// - True otherwise | ||||
#[derive(Clone)] | ||||
pub struct PlainInfo { | ||||
is_plain: bool, | ||||
except: Vec<Vec<u8>>, | ||||
} | ||||
impl PlainInfo { | ||||
fn plain_except(except: Vec<Vec<u8>>) -> Self { | ||||
PlainInfo { | ||||
is_plain: true, | ||||
except, | ||||
} | ||||
} | ||||
pub fn empty() -> PlainInfo { | ||||
PlainInfo { | ||||
is_plain: false, | ||||
except: vec![], | ||||
} | ||||
} | ||||
pub fn from_env() -> PlainInfo { | ||||
if let Some(except) = env::var_os("HGPLAINEXCEPT") { | ||||
PlainInfo::plain_except( | ||||
get_bytes_from_os_string(except) | ||||
.split(|&byte| byte == b',') | ||||
.map(|x| x.to_vec()) | ||||
.collect(), | ||||
) | ||||
} else { | ||||
PlainInfo { | ||||
is_plain: env::var_os("HGPLAIN").is_some(), | ||||
except: vec![], | ||||
} | ||||
} | ||||
} | ||||
pub fn is_feature_plain(&self, feature: &str) -> bool { | ||||
return self.is_plain | ||||
&& !self | ||||
.except | ||||
.iter() | ||||
.any(|exception| exception.as_slice() == feature.as_bytes()); | ||||
} | ||||
pub fn is_plain(&self) -> bool { | ||||
self.is_plain | ||||
} | ||||
pub fn plainalias(&self) -> bool { | ||||
self.is_feature_plain("alias") | ||||
} | ||||
pub fn plainrevsetalias(&self) -> bool { | ||||
self.is_feature_plain("revsetalias") | ||||
} | ||||
pub fn plaintemplatealias(&self) -> bool { | ||||
self.is_feature_plain("templatealias") | ||||
} | ||||
pub fn plaintweakdefaults(&self) -> bool { | ||||
self.is_feature_plain("tweakdefaults") | ||||
} | ||||
} | ||||