This commit is contained in:
sxyazi 2025-01-11 10:18:55 +08:00
parent 5e72032269
commit 9af51ae20d
No known key found for this signature in database
4 changed files with 11 additions and 17 deletions

View file

@ -9,10 +9,9 @@ impl Dependency {
pub(super) async fn delete(&self) -> Result<()> { pub(super) async fn delete(&self) -> Result<()> {
self.header("Deleting package `{name}`")?; self.header("Deleting package `{name}`")?;
let path = self.deployed_directory(); let dir = self.target();
if must_exists(&dir).await {
if must_exists(&path).await { fs::remove_dir_all(&dir).await?;
fs::remove_dir_all(&path).await?;
} else { } else {
bail!( bail!(
"The package.toml file states that `{}` exists, but the directory was not found. The entry will be removed from package.toml.", "The package.toml file states that `{}` exists, but the directory was not found. The entry will be removed from package.toml.",

View file

@ -20,15 +20,18 @@ pub(crate) struct Dependency {
} }
impl Dependency { impl Dependency {
#[inline]
pub(super) fn local(&self) -> PathBuf { pub(super) fn local(&self) -> PathBuf {
Xdg::state_dir() Xdg::state_dir()
.join("packages") .join("packages")
.join(format!("{:x}", XxHash3_128::oneshot(self.remote().as_bytes()))) .join(format!("{:x}", XxHash3_128::oneshot(self.remote().as_bytes())))
} }
#[inline] pub(super) fn remote(&self) -> String {
pub(super) fn deployed_directory(&self) -> PathBuf { // Support more Git hosting services in the future
format!("https://github.com/{}.git", self.parent)
}
pub(super) fn target(&self) -> PathBuf {
if self.is_flavor { if self.is_flavor {
Xdg::config_dir().join(format!("flavors/{}", self.name)) Xdg::config_dir().join(format!("flavors/{}", self.name))
} else { } else {
@ -36,12 +39,6 @@ impl Dependency {
} }
} }
#[inline]
pub(super) fn remote(&self) -> String {
// Support more Git hosting services in the future
format!("https://github.com/{}.git", self.parent)
}
pub(super) fn header(&self, s: &str) -> Result<()> { pub(super) fn header(&self, s: &str) -> Result<()> {
use crossterm::style::{Attribute, Print, SetAttributes}; use crossterm::style::{Attribute, Print, SetAttributes};

View file

@ -14,8 +14,7 @@ impl Dependency {
self.header("Deploying package `{name}`")?; self.header("Deploying package `{name}`")?;
self.is_flavor = maybe_exists(&from.join("flavor.toml")).await; self.is_flavor = maybe_exists(&from.join("flavor.toml")).await;
let to = self.deployed_directory(); let to = self.target();
if maybe_exists(&to).await && self.hash != self.hash().await? { if maybe_exists(&to).await && self.hash != self.hash().await? {
bail!( bail!(
"The user has modified the contents of the `{}` package. For safety, the operation has been aborted. "The user has modified the contents of the `{}` package. For safety, the operation has been aborted.

View file

@ -7,8 +7,7 @@ use super::Dependency;
impl Dependency { impl Dependency {
pub(crate) async fn hash(&self) -> Result<String> { pub(crate) async fn hash(&self) -> Result<String> {
let dir = self.deployed_directory(); let dir = self.target();
let files = if self.is_flavor { let files = if self.is_flavor {
&[ &[
"LICENSE", "LICENSE",