summaryrefslogtreecommitdiff
path: root/src/dev/update.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-07-05 13:39:50 +0200
committermo8it <mo8it@proton.me>2024-07-05 13:39:50 +0200
commit7123c7ae3a9605fbe962e4ef0a0f1424cd16fef8 (patch)
treec67f7e62bb9a179ae4fdbab492501cb6847e64c7 /src/dev/update.rs
parent77b687d501771c24bd83294d97b8e6f9ffa92d6b (diff)
parent4d9c346a173bb722b929f3ea3c00f84954483e24 (diff)
Merge remote-tracking branch 'upstream/main' into fix-enum-variant-inconsistency
Diffstat (limited to 'src/dev/update.rs')
-rw-r--r--src/dev/update.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/dev/update.rs b/src/dev/update.rs
new file mode 100644
index 0000000..66efe3d
--- /dev/null
+++ b/src/dev/update.rs
@@ -0,0 +1,50 @@
+use anyhow::{Context, Result};
+use std::fs;
+
+use crate::{
+ cargo_toml::updated_cargo_toml,
+ info_file::{ExerciseInfo, InfoFile},
+ DEBUG_PROFILE,
+};
+
+// Update the `Cargo.toml` file.
+fn update_cargo_toml(
+ exercise_infos: &[ExerciseInfo],
+ current_cargo_toml: &str,
+ exercise_path_prefix: &[u8],
+ cargo_toml_path: &str,
+) -> Result<()> {
+ let updated_cargo_toml =
+ updated_cargo_toml(exercise_infos, current_cargo_toml, exercise_path_prefix)?;
+
+ fs::write(cargo_toml_path, updated_cargo_toml)
+ .context("Failed to write the `Cargo.toml` file")?;
+
+ Ok(())
+}
+
+pub fn update() -> Result<()> {
+ let info_file = InfoFile::parse()?;
+
+ // A hack to make `cargo run -- dev update` work when developing Rustlings.
+ if DEBUG_PROFILE {
+ update_cargo_toml(
+ &info_file.exercises,
+ include_str!("../../dev-Cargo.toml"),
+ b"../",
+ "dev/Cargo.toml",
+ )
+ .context("Failed to update the file `dev/Cargo.toml`")?;
+
+ println!("Updated `dev/Cargo.toml`");
+ } else {
+ let current_cargo_toml =
+ fs::read_to_string("Cargo.toml").context("Failed to read the file `Cargo.toml`")?;
+ update_cargo_toml(&info_file.exercises, &current_cargo_toml, b"", "Cargo.toml")
+ .context("Failed to update the file `Cargo.toml`")?;
+
+ println!("Updated `Cargo.toml`");
+ }
+
+ Ok(())
+}