Skip to content

Commit

Permalink
fix(build): rerun plugin build when plugins.json changes, wait write (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasfernog committed May 8, 2023
1 parent d48aaa1 commit 2cc282c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
1 change: 1 addition & 0 deletions core/tauri-build/src/lib.rs
Expand Up @@ -283,6 +283,7 @@ dependencies {"
let plugins_json_path = project_dir.join(".tauri").join("plugins.json");
let mut plugins: HashMap<String, mobile::PluginMetadata> = if plugins_json_path.exists() {
let s = read_to_string(&plugins_json_path)?;
println!("cargo:rerun-if-changed={}", plugins_json_path.display());
serde_json::from_str(&s)?
} else {
Default::default()
Expand Down
39 changes: 35 additions & 4 deletions core/tauri-build/src/mobile.rs
Expand Up @@ -5,14 +5,17 @@
use std::{
collections::HashMap,
env::{var, var_os},
fs::{copy, create_dir, create_dir_all, read_to_string, remove_dir_all, write},
fs::{copy, create_dir, create_dir_all, read_to_string, remove_dir_all, File},
io::Write,
path::{Path, PathBuf},
thread::sleep,
time::{Duration, SystemTime},
};

use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize)]
#[derive(Debug, Deserialize, Serialize, Eq, PartialEq)]
pub(crate) struct PluginMetadata {
pub path: PathBuf,
}
Expand Down Expand Up @@ -77,8 +80,36 @@ impl PluginBuilder {
} else {
Default::default()
};
plugins.insert(pkg_name, PluginMetadata { path: source });
write(&plugins_json_path, serde_json::to_string(&plugins)?)?;

let metadata = PluginMetadata { path: source };
let already_set = plugins
.get(&pkg_name)
.map(|m| m == &metadata)
.unwrap_or(false);
if !already_set {
plugins.insert(pkg_name, metadata);
let mut file = File::create(&plugins_json_path)?;
file.write_all(serde_json::to_string(&plugins)?.as_bytes())?;
file.flush()?;

// wait for the file to be written before moving to the app build script
let now = SystemTime::now()
.checked_sub(Duration::from_millis(10))
.unwrap();
let mut attempts = 0;
while !plugins_json_path
.metadata()
.map(|m| m.modified().unwrap() >= now)
.unwrap_or(false)
{
attempts += 1;
if attempts == 10 {
anyhow::bail!("Could not determine whether the plugins.json file has been modified or not, please rerun the build.");
}
sleep(Duration::from_millis(100));
}
}
println!("cargo:rerun-if-changed={}", plugins_json_path.display());
}
}
}
Expand Down

0 comments on commit 2cc282c

Please sign in to comment.