diff --git a/src/bin/juliaup.rs b/src/bin/juliaup.rs index d2a2e579..8b0159f4 100644 --- a/src/bin/juliaup.rs +++ b/src/bin/juliaup.rs @@ -3,6 +3,7 @@ use clap::Parser; use juliaup::cli::{ConfigSubCmd, Juliaup, OverrideSubCmd, SelfSubCmd}; use juliaup::command_api::run_command_api; use juliaup::command_completions::run_command_completions; +use juliaup::command_config_featuremanifestsupport::run_command_config_featuremanifestsupport; #[cfg(not(windows))] use juliaup::command_config_symlinks::run_command_config_symlinks; use juliaup::command_config_versionsdbupdate::run_command_config_versionsdbupdate; @@ -123,6 +124,9 @@ fn main() -> Result<()> { ConfigSubCmd::VersionsDbUpdateInterval { value } => { run_command_config_versionsdbupdate(value, false, &paths) } + ConfigSubCmd::FeatureManifestSupport { value } => { + run_command_config_featuremanifestsupport(value, false, &paths) + } }, Juliaup::Api { command } => run_command_api(&command, &paths), Juliaup::InitialSetupFromLauncher {} => run_command_initial_setup_from_launcher(&paths), diff --git a/src/cli.rs b/src/cli.rs index 5d7bc76a..69af596f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -157,4 +157,10 @@ pub enum ConfigSubCmd { /// New value value: Option, }, + /// Enable Julia version selection from manifests + #[clap(name = "featuremanifestsupport")] + FeatureManifestSupport { + /// New value + value: Option, + }, } diff --git a/src/command_config_featuremanifestsupport.rs b/src/command_config_featuremanifestsupport.rs new file mode 100644 index 00000000..f32036c4 --- /dev/null +++ b/src/command_config_featuremanifestsupport.rs @@ -0,0 +1,50 @@ +use crate::config_file::{load_config_db, load_mut_config_db, save_config_db}; +use anyhow::{Context, Result}; + +pub fn run_command_config_featuremanifestsupport( + value: Option, + quiet: bool, + paths: &crate::global_paths::GlobalPaths, +) -> Result<()> { + match value { + Some(value) => { + let mut config_file = load_mut_config_db(paths) + .with_context(|| "`config` command failed to load configuration data.")?; + + let mut value_changed = false; + + if value != config_file.data.settings.feature_manifest_support { + config_file.data.settings.feature_manifest_support = value; + + value_changed = true; + } + + save_config_db(&mut config_file) + .with_context(|| "Failed to save configuration file from `config` command.")?; + + if !quiet { + if value_changed { + eprintln!("Property 'featuremanifestsupport' set to '{}'", value); + } else { + eprintln!( + "Property 'featuremanifestsupport' is already set to '{}'", + value + ); + } + } + } + None => { + let config_file = load_config_db(paths) + .with_context(|| "`config` command failed to load configuration data.")?; + + if !quiet { + eprintln!( + "Property 'featuremanifestsupport' set to '{}'", + config_file.data.settings.feature_manifest_support + ); + } + } + }; + + Ok(()) +} diff --git a/src/config_file.rs b/src/config_file.rs index 0928d9aa..1059abcd 100644 --- a/src/config_file.rs +++ b/src/config_file.rs @@ -67,6 +67,12 @@ pub struct JuliaupConfigSettings { skip_serializing_if = "is_default_versionsdb_update_interval" )] pub versionsdb_update_interval: i64, + #[serde( + rename = "FeatureManifestSupport", + default, + skip_serializing_if = "is_default" + )] + pub feature_manifest_support: bool, } impl Default for JuliaupConfigSettings { @@ -74,6 +80,7 @@ impl Default for JuliaupConfigSettings { JuliaupConfigSettings { create_channel_symlinks: false, versionsdb_update_interval: default_versionsdb_update_interval(), + feature_manifest_support: false, } } } @@ -190,6 +197,7 @@ pub fn load_config_db(paths: &GlobalPaths) -> Result settings: JuliaupConfigSettings { create_channel_symlinks: false, versionsdb_update_interval: default_versionsdb_update_interval(), + feature_manifest_support: false, }, last_version_db_update: None, }, @@ -286,6 +294,7 @@ pub fn load_mut_config_db(paths: &GlobalPaths) -> Result { settings: JuliaupConfigSettings { create_channel_symlinks: false, versionsdb_update_interval: default_versionsdb_update_interval(), + feature_manifest_support: false, }, last_version_db_update: None, }; diff --git a/src/lib.rs b/src/lib.rs index 92675479..f8ea1caf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ pub mod command_add; pub mod command_api; pub mod command_completions; pub mod command_config_backgroundselfupdate; +pub mod command_config_featuremanifestsupport; pub mod command_config_modifypath; pub mod command_config_startupselfupdate; pub mod command_config_symlinks;