git-utils: neutralize off-path filter helpers

This commit is contained in:
Chris Bookholt
2026-07-01 15:58:52 -07:00
parent 4bf391509e
commit bed78fad06
5 changed files with 395 additions and 12 deletions
+42
View File
@@ -2,6 +2,7 @@ use super::*;
use crate::git_config::GitConfigScope;
use pretty_assertions::assert_eq;
use std::collections::BTreeMap;
use std::collections::BTreeSet;
use std::path::Path;
#[test]
@@ -57,6 +58,47 @@ fn selected_filter_policy_allows_effective_empty_value() {
);
}
#[test]
fn filter_snapshot_retains_required_without_treating_it_as_executable() {
let mut entries = filter_entries(
GitConfigScope::Local,
Path::new("config"),
"filter.demo.smudge",
"smudge-command",
);
entries.extend(filter_entries(
GitConfigScope::Command,
Path::new("command line:"),
"filter.demo.required",
"true",
));
assert_eq!(
executable_filter_drivers(&entries).expect("executable drivers"),
BTreeSet::from(["demo".to_string()])
);
let neutralization = GitFilterNeutralization {
git_config_args: Vec::new(),
_config_dir: None,
filter_config: entries,
};
assert_eq!(
neutralization.filter_value("demo", "required"),
Some("true")
);
let required_only = filter_entries(
GitConfigScope::Local,
Path::new("config"),
"filter.demo.required",
"true",
);
assert!(
executable_filter_drivers(&required_only)
.expect("required-only config")
.is_empty()
);
}
#[test]
fn filter_driver_parser_accepts_empty_name() {
assert_eq!(