diff --git a/tooling/cli.rs/Cargo.lock b/tooling/cli.rs/Cargo.lock index 46b76b5e3..5df89d299 100755 --- a/tooling/cli.rs/Cargo.lock +++ b/tooling/cli.rs/Cargo.lock @@ -794,6 +794,15 @@ dependencies = [ "libc", ] +[[package]] +name = "itertools" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "0.4.7" @@ -2051,13 +2060,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.2.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbbdcf4f749dd33b1f1ea19b547bf789d87442ec40767d6015e5e2d39158d69a" +checksum = "1d30834716e93eef7db510648299f647427858e7e2c0beeec2699ea2289c7739" dependencies = [ - "chrono", "combine", - "linked-hash-map", + "indexmap", + "itertools", + "vec1", ] [[package]] @@ -2204,6 +2214,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec1" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc1631c774f0f9570797191e01247cbefde789eebfbf128074cb934115a6133" + [[package]] name = "vec_map" version = "0.8.2" @@ -2379,9 +2395,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winreg" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16cdb3898397cf7f624c294948669beafaeebc5577d5ec53d0afb76633593597" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi 0.3.9", ] diff --git a/tooling/cli.rs/Cargo.toml b/tooling/cli.rs/Cargo.toml index f28e0f65d..2392827ac 100644 --- a/tooling/cli.rs/Cargo.toml +++ b/tooling/cli.rs/Cargo.toml @@ -27,7 +27,7 @@ serde_json = "1.0" serde_with = "1.10" notify = "4.0" shared_child = "0.3" -toml_edit = "0.2" +toml_edit = "0.3" json-patch = "0.2" schemars = "0.8" toml = "0.5" diff --git a/tooling/cli.rs/src/helpers/manifest.rs b/tooling/cli.rs/src/helpers/manifest.rs index a568b1778..7768d42d2 100644 --- a/tooling/cli.rs/src/helpers/manifest.rs +++ b/tooling/cli.rs/src/helpers/manifest.rs @@ -8,7 +8,7 @@ use super::{ }; use anyhow::Context; -use toml_edit::{Array, Document, InlineTable, Item, Value}; +use toml_edit::{Array, Document, InlineTable, Item, Table, Value}; use std::{ collections::HashSet, @@ -41,7 +41,7 @@ fn toml_array(features: &HashSet) -> Array { let mut features: Vec = features.iter().map(|f| f.to_string()).collect(); features.sort(); for feature in features { - f.push(feature.as_str()).unwrap(); + f.push(feature.as_str()); } f } @@ -52,10 +52,11 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { let dependencies = manifest .as_table_mut() .entry("dependencies") + .or_insert(Item::Table(Table::new())) .as_table_mut() .expect("manifest dependencies isn't a table"); - let tauri_entry = dependencies.entry("tauri"); + let tauri_item = dependencies.entry("tauri").or_insert(Item::None); let config_guard = config.lock().unwrap(); let config = config_guard.as_ref().unwrap(); @@ -78,8 +79,8 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { let mut cli_managed_features = all_allowlist_features(); cli_managed_features.extend(vec!["cli", "updater", "system-tray"]); - if let Some(tauri) = tauri_entry.as_table_mut() { - let manifest_features = tauri.entry("features"); + if let Some(tauri) = tauri_item.as_table_mut() { + let manifest_features = tauri.entry("features").or_insert(Item::None); if let Item::Value(Value::Array(f)) = &manifest_features { for feat in f.iter() { if let Value::String(feature) = feat { @@ -90,7 +91,7 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { } } *manifest_features = Item::Value(Value::Array(toml_array(&features))); - } else if let Some(tauri) = tauri_entry.as_value_mut() { + } else if let Some(tauri) = tauri_item.as_value_mut() { match tauri { Value::InlineTable(table) => { let manifest_features = table.get_or_insert("features", Value::Array(Default::default())); @@ -128,7 +129,7 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { File::create(&manifest_path).with_context(|| "failed to open Cargo.toml for rewrite")?; manifest_file.write_all( manifest - .to_string_in_original_order() + .to_string() // apply some formatting fixes .replace(r#"" ,features =["#, r#"", features = ["#) .replace("]}", "] }") @@ -143,12 +144,17 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { pub fn get_workspace_members() -> crate::Result> { let mut manifest = read_manifest(&tauri_dir().join("Cargo.toml"))?; - let workspace = manifest.as_table_mut().entry("workspace").as_table_mut(); + let workspace = manifest + .as_table_mut() + .entry("workspace") + .or_insert(Item::None) + .as_table_mut(); match workspace { Some(workspace) => { let members = workspace .entry("members") + .or_insert(Item::None) .as_array() .expect("workspace members aren't an array"); Ok(