diff --git a/packaging/aur/dcr-git b/packaging/aur/dcr-git
index 12038a6..2c5743a 160000
--- a/packaging/aur/dcr-git
+++ b/packaging/aur/dcr-git
@@ -1 +1 @@
-Subproject commit 12038a613e9c314c545cbb912590dc6b698b1dd0
+Subproject commit 2c5743a45685577d1cae563bdb749ff070a15759
diff --git a/src/cli/init.rs b/src/cli/init.rs
index 911fc65..76d2d16 100644
--- a/src/cli/init.rs
+++ b/src/cli/init.rs
@@ -16,7 +16,7 @@
// along with this program. If not, see .
use crate::config::FILE_MAIN_C;
-use crate::core::config::Config;
+use crate::core::config::{validate_package_name, Config};
use crate::utils::fs::check_dir;
use crate::utils::log::{error, warn};
use crate::utils::text::{BOLD_CYAN, BOLD_GREEN, colored, printc};
@@ -41,6 +41,15 @@ pub fn init(args: &[String]) -> i32 {
return 1;
}
+ if let Err(e) = validate_package_name(&project_name) {
+ error(&format!(
+ "Invalid project name `{}`: {}",
+ colored(&project_name, BOLD_CYAN),
+ e
+ ));
+ return 1;
+ }
+
let cwd = std::env::current_dir()
.map(|v| v.to_string_lossy().to_string())
.unwrap_or_else(|_| ".".to_string());
diff --git a/src/cli/new.rs b/src/cli/new.rs
index b56bdff..bcc942d 100644
--- a/src/cli/new.rs
+++ b/src/cli/new.rs
@@ -16,7 +16,7 @@
// along with this program. If not, see .
use crate::config::FILE_MAIN_C;
-use crate::core::config::Config;
+use crate::core::config::{validate_package_name, Config};
use crate::utils::fs::check_dir;
use crate::utils::log::{error, warn};
use crate::utils::text::{BOLD_CYAN, BOLD_GREEN, colored, printc};
@@ -42,6 +42,15 @@ pub fn new(args: &[String]) -> i32 {
colored(project_name, BOLD_CYAN)
);
+ if let Err(e) = validate_package_name(project_name) {
+ error(&format!(
+ "Invalid project name `{}`: {}",
+ colored(project_name, BOLD_CYAN),
+ e
+ ));
+ return 1;
+ }
+
if items.contains(project_name) {
error(&format!(
"Directory `{}` already exists\n",
diff --git a/src/core/config.rs b/src/core/config.rs
index f0fd405..25ee1f2 100644
--- a/src/core/config.rs
+++ b/src/core/config.rs
@@ -447,7 +447,7 @@ fn parse_typed_config(value: &Value) -> Result {
value.clone().try_into().map_err(ConfigError::TomlDe)
}
-fn validate_package_name(name: &str) -> Result<(), ConfigError> {
+pub fn validate_package_name(name: &str) -> Result<(), ConfigError> {
let trimmed = name.trim();
if trimmed != name {
return Err(ConfigError::Invalid(