[feat] introduce Config
for centralized runtime settings; refactor progress management and backend selection to leverage config
This commit is contained in:
33
src/main.rs
33
src/main.rs
@@ -263,10 +263,11 @@ fn run() -> Result<()> {
|
||||
|
||||
let args = Args::parse();
|
||||
|
||||
// Configure global flags for library and stderr silencing.
|
||||
polyscribe::set_quiet(args.quiet);
|
||||
polyscribe::set_verbose(args.verbose);
|
||||
polyscribe::set_no_interaction(args.no_interaction);
|
||||
// Build Config and set globals (temporary compatibility). Prefer Config going forward.
|
||||
let config = polyscribe::Config::new(args.quiet, args.verbose, args.no_interaction, /*no_progress:*/ args.no_progress);
|
||||
polyscribe::set_quiet(config.quiet);
|
||||
polyscribe::set_verbose(config.verbose);
|
||||
polyscribe::set_no_interaction(config.no_interaction);
|
||||
let _silence = polyscribe::StderrSilencer::activate_if_quiet();
|
||||
|
||||
// Handle auxiliary subcommands early and exit.
|
||||
@@ -290,8 +291,8 @@ fn run() -> Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
// Disable complex progress bars for integration-friendly behavior
|
||||
let pf = ProgressFactory::new(true);
|
||||
// Prefer Config-driven progress factory
|
||||
let pf = ProgressFactory::from_config(&config);
|
||||
let pm = pf.make_manager(pf.decide_mode(args.inputs.len()));
|
||||
|
||||
// Determine formats
|
||||
@@ -742,26 +743,26 @@ mod tests {
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_VULKAN");
|
||||
}
|
||||
// No GPU -> CPU
|
||||
let sel = select_backend(BackendKind::Auto, false).unwrap();
|
||||
let sel = select_backend(BackendKind::Auto, &polyscribe::Config::default()).unwrap();
|
||||
assert_eq!(sel.chosen, BackendKind::Cpu);
|
||||
// Vulkan only
|
||||
unsafe {
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_VULKAN", "1");
|
||||
}
|
||||
let sel = select_backend(BackendKind::Auto, false).unwrap();
|
||||
let sel = select_backend(BackendKind::Auto, &polyscribe::Config::default()).unwrap();
|
||||
assert_eq!(sel.chosen, BackendKind::Vulkan);
|
||||
// HIP preferred over Vulkan
|
||||
unsafe {
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_HIP", "1");
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_VULKAN");
|
||||
}
|
||||
let sel = select_backend(BackendKind::Auto, false).unwrap();
|
||||
let sel = select_backend(BackendKind::Auto, &polyscribe::Config::default()).unwrap();
|
||||
assert_eq!(sel.chosen, BackendKind::Hip);
|
||||
// CUDA preferred over HIP
|
||||
unsafe {
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_CUDA", "1");
|
||||
}
|
||||
let sel = select_backend(BackendKind::Auto, false).unwrap();
|
||||
let sel = select_backend(BackendKind::Auto, &polyscribe::Config::default()).unwrap();
|
||||
assert_eq!(sel.chosen, BackendKind::Cuda);
|
||||
// Cleanup
|
||||
unsafe {
|
||||
@@ -780,26 +781,26 @@ mod tests {
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_HIP");
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_VULKAN");
|
||||
}
|
||||
assert!(select_backend(BackendKind::Cuda, false).is_err());
|
||||
assert!(select_backend(BackendKind::Hip, false).is_err());
|
||||
assert!(select_backend(BackendKind::Vulkan, false).is_err());
|
||||
assert!(select_backend(BackendKind::Cuda, &polyscribe::Config::default()).is_err());
|
||||
assert!(select_backend(BackendKind::Hip, &polyscribe::Config::default()).is_err());
|
||||
assert!(select_backend(BackendKind::Vulkan, &polyscribe::Config::default()).is_err());
|
||||
// Turn on CUDA only
|
||||
unsafe {
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_CUDA", "1");
|
||||
}
|
||||
assert!(select_backend(BackendKind::Cuda, false).is_ok());
|
||||
assert!(select_backend(BackendKind::Cuda, &polyscribe::Config::default()).is_ok());
|
||||
// Turn on HIP only
|
||||
unsafe {
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_CUDA");
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_HIP", "1");
|
||||
}
|
||||
assert!(select_backend(BackendKind::Hip, false).is_ok());
|
||||
assert!(select_backend(BackendKind::Hip, &polyscribe::Config::default()).is_ok());
|
||||
// Turn on Vulkan only
|
||||
unsafe {
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_HIP");
|
||||
std_env::set_var("POLYSCRIBE_TEST_FORCE_VULKAN", "1");
|
||||
}
|
||||
assert!(select_backend(BackendKind::Vulkan, false).is_ok());
|
||||
assert!(select_backend(BackendKind::Vulkan, &polyscribe::Config::default()).is_ok());
|
||||
// Cleanup
|
||||
unsafe {
|
||||
std_env::remove_var("POLYSCRIBE_TEST_FORCE_VULKAN");
|
||||
|
Reference in New Issue
Block a user