mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 14:51:03 +00:00
50 lines
1.4 KiB
Rust
50 lines
1.4 KiB
Rust
use anyhow::{Context, Result, bail};
|
|
use tokio::fs;
|
|
use yazi_shared::{Xdg, fs::{maybe_exists, must_exists}};
|
|
|
|
use super::Package;
|
|
|
|
const TRACKER: &str = "DO_NOT_MODIFY_ANYTHING_IN_THIS_DIRECTORY";
|
|
|
|
impl Package {
|
|
pub(super) async fn deploy(&mut self) -> Result<()> {
|
|
let Some(name) = self.name().map(ToOwned::to_owned) else { bail!("Invalid package url") };
|
|
let from = self.local().join(&self.child);
|
|
|
|
self.header("Deploying package `{name}`")?;
|
|
self.is_flavor = maybe_exists(&from.join("flavor.toml")).await;
|
|
let to = if self.is_flavor {
|
|
Xdg::config_dir().join(format!("flavors/{name}"))
|
|
} else {
|
|
Xdg::config_dir().join(format!("plugins/{name}"))
|
|
};
|
|
|
|
let tracker = to.join(TRACKER);
|
|
if maybe_exists(&to).await && !must_exists(&tracker).await {
|
|
bail!(
|
|
"A user package with the same name `{name}` already exists.
|
|
For safety, please manually delete it from your plugin/flavor directory and re-run the command."
|
|
);
|
|
}
|
|
|
|
fs::create_dir_all(&to).await?;
|
|
fs::write(tracker, []).await?;
|
|
|
|
let files = if self.is_flavor {
|
|
&["flavor.toml", "tmtheme.xml", "README.md", "preview.png", "LICENSE", "LICENSE-tmtheme"][..]
|
|
} else {
|
|
&["init.lua", "README.md", "LICENSE"][..]
|
|
};
|
|
|
|
for file in files {
|
|
let (from, to) = (from.join(file), to.join(file));
|
|
|
|
fs::copy(&from, &to)
|
|
.await
|
|
.with_context(|| format!("Failed to copy `{}` to `{}`", from.display(), to.display()))?;
|
|
}
|
|
|
|
println!("Done!");
|
|
Ok(())
|
|
}
|
|
}
|