Feat: "dx new" check if given project name is available in filesystem (#4773)
Co-authored-by: Herbert Maschke <thyseus@pm.me>
This commit is contained in:
1 parent
6d5e1ac8de
commit
fc069f0faf
3 files changed
+21
-4
No files matched your search
@@ -31,6 +31,8 @@ node_modules/
|
|||||||
/packages/playwright-report/
|
/packages/playwright-report/
|
||||||
/packages/playwright/.cache/
|
/packages/playwright/.cache/
|
||||||
|
|
||||||
|
# Zed
|
||||||
|
.zed/
|
||||||
|
|
||||||
# ignore the output of tmps
|
# ignore the output of tmps
|
||||||
tmp/
|
tmp/
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use super::*;
|
|||||||
use crate::TraceSrc;
|
use crate::TraceSrc;
|
||||||
use anyhow::{bail, Context};
|
use anyhow::{bail, Context};
|
||||||
use cargo_generate::{GenerateArgs, TemplatePath, Vcs};
|
use cargo_generate::{GenerateArgs, TemplatePath, Vcs};
|
||||||
use std::path::Path;
|
use std::{fs, path::Path};
|
||||||
|
|
||||||
pub(crate) static DEFAULT_TEMPLATE: &str = "gh:dioxuslabs/dioxus-template";
|
pub(crate) static DEFAULT_TEMPLATE: &str = "gh:dioxuslabs/dioxus-template";
|
||||||
|
|
||||||
@@ -61,9 +61,11 @@ impl Create {
|
|||||||
self.name = Some(create::name_from_path(&self.path)?);
|
self.name = Some(create::name_from_path(&self.path)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_path(&self.path).await?;
|
||||||
|
|
||||||
// Perform a connectivity check so we just don't it around doing nothing if there's a network error
|
// Perform a connectivity check so we just don't it around doing nothing if there's a network error
|
||||||
if self.template.is_none() {
|
if self.template.is_none() {
|
||||||
connectivity_check().await?;
|
check_connectivity().await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no template is specified, use the default one and set the branch to the latest release.
|
// If no template is specified, use the default one and set the branch to the latest release.
|
||||||
@@ -232,9 +234,22 @@ fn remove_triple_newlines(string: &str) -> String {
|
|||||||
new_string
|
new_string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if the requested project can be created in the filesystem
|
||||||
|
pub(crate) async fn check_path(path: &std::path::PathBuf) -> Result<()> {
|
||||||
|
match fs::metadata(path) {
|
||||||
|
Ok(_metadata) => {
|
||||||
|
bail!(
|
||||||
|
"A file or directory with the given project name \"{}\" already exists.",
|
||||||
|
path.to_string_lossy()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Err(_err) => Ok(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Perform a health check against github itself before we attempt to download any templates hosted
|
/// Perform a health check against github itself before we attempt to download any templates hosted
|
||||||
/// on github.
|
/// on github.
|
||||||
pub(crate) async fn connectivity_check() -> Result<()> {
|
pub(crate) async fn check_connectivity() -> Result<()> {
|
||||||
if crate::VERBOSITY
|
if crate::VERBOSITY
|
||||||
.get()
|
.get()
|
||||||
.map(|f| f.offline)
|
.map(|f| f.offline)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ impl Init {
|
|||||||
|
|
||||||
// Perform a connectivity check so we just don't it around doing nothing if there's a network error
|
// Perform a connectivity check so we just don't it around doing nothing if there's a network error
|
||||||
if self.template.is_none() {
|
if self.template.is_none() {
|
||||||
create::connectivity_check().await?;
|
create::check_connectivity().await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no template is specified, use the default one and set the branch to the latest release.
|
// If no template is specified, use the default one and set the branch to the latest release.
|
||||||
|
|||||||
Reference in new issue
Block a user