diff rust/hg-core/src/config/config.rs @ 49513:467d9df98c68

rhg: centralize PlainInfo
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Thu, 22 Sep 2022 17:16:54 -0400
parents 6939d5ed20e0
children e37416d432e9
line wrap: on
line diff
--- a/rust/hg-core/src/config/config.rs	Tue Sep 20 18:16:50 2022 -0400
+++ b/rust/hg-core/src/config/config.rs	Thu Sep 22 17:16:54 2022 -0400
@@ -12,6 +12,7 @@
 use crate::config::layer::{
     ConfigError, ConfigLayer, ConfigOrigin, ConfigValue,
 };
+use crate::config::plain_info::PlainInfo;
 use crate::utils::files::get_bytes_from_os_str;
 use format_bytes::{write_bytes, DisplayBytes};
 use std::collections::HashSet;
@@ -22,14 +23,6 @@
 
 use crate::errors::{HgResultExt, IoResultExt};
 
-#[derive(Clone)]
-pub struct PlainInfo {
-    pub plain: bool,
-    pub plainalias: bool,
-    pub plainrevsetalias: bool,
-    pub plaintemplatealias: bool,
-}
-
 /// Holds the config values for the current repository
 /// TODO update this docstring once we support more sources
 #[derive(Clone)]
@@ -92,21 +85,21 @@
     }
 }
 
+/// Returns true if the config item is disabled by PLAIN or PLAINEXCEPT
 fn should_ignore(plain: &PlainInfo, section: &[u8], item: &[u8]) -> bool {
     // duplication with [_applyconfig] in [ui.py],
-    if !plain.plain {
+    if !plain.is_plain() {
         return false;
     }
     if section == b"alias" {
-        return plain.plainalias;
+        return plain.plainalias();
     }
     if section == b"revsetalias" {
-        return plain.plainrevsetalias;
+        return plain.plainrevsetalias();
     }
     if section == b"templatealias" {
-        return plain.plaintemplatealias;
+        return plain.plaintemplatealias();
     }
-
     if section == b"ui" {
         let to_delete: &[&[u8]] = &[
             b"debug",
@@ -127,16 +120,6 @@
     return sections_to_delete.contains(&section);
 }
 
-impl PlainInfo {
-    pub fn empty() -> Self {
-        Self {
-            plain: false,
-            plainalias: false,
-            plainrevsetalias: false,
-            plaintemplatealias: false,
-        }
-    }
-}
 impl Config {
     /// The configuration to use when printing configuration-loading errors
     pub fn empty() -> Self {
@@ -478,6 +461,8 @@
         section: &[u8],
         item: &[u8],
     ) -> Option<(&ConfigLayer, &ConfigValue)> {
+        // Filter out the config items that are hidden by [PLAIN].
+        // This differs from python hg where we delete them from the config.
         if should_ignore(&self.plain, &section, &item) {
             return None;
         }