summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhenriquelalves <henriquelalves@gmail.com>2025-01-18 16:57:18 +0200
committerhenriquelalves <henriquelalves@gmail.com>2025-01-18 16:57:18 +0200
commite9ea9e8658a069879447e7ccf5b8e9112046eff9 (patch)
tree5b629620442c413293405d2ac83080ffab43f718
parent6b2b018b9cc2985e388eeb48d54df39d00c0d254 (diff)
downloadglam-main.tar.gz
glam-main.tar.bz2
glam-main.zip
Add plugin creation to empty repositories commandHEADmain
-rw-r--r--src/commands.rs91
-rw-r--r--src/main.rs11
2 files changed, 102 insertions, 0 deletions
diff --git a/src/commands.rs b/src/commands.rs
index 65032bf..beaf7b5 100644
--- a/src/commands.rs
+++ b/src/commands.rs
@@ -189,6 +189,62 @@ pub fn add_repository(root: &str, git_repo: &str, verbose: bool) {
write_glam_file(&glam_file_path, &glam_object);
}
+pub fn create_addon(root: &str, verbose: bool) {
+ let glam_file_path = format!("{}/.glam", root);
+ let mut glam_object = read_glam_file(&glam_file_path);
+ let mut glam_packages = glam_object.packages;
+
+ let folders = list_addons(root, verbose);
+
+ let addon_name = Select::new("Which addon you'll create a repository?", folders)
+ .prompt()
+ .unwrap();
+
+ if find_package_by_link(&glam_packages, &addon_name).is_some() {
+ utils::log_error("There is a repository linked to that addon already!");
+ exit(1);
+ }
+
+ let repo_name = Text::new("Name of the repository:")
+ .with_default(&addon_name)
+ .with_placeholder(&addon_name)
+ .prompt()
+ .unwrap();
+
+ let res = utils::run_shell_command(
+ &format!("mkdir -p .glam.d/{}/addons/{}", repo_name, addon_name),
+ &root,
+ verbose
+ );
+
+ utils::assert_result(&res, "Repository folder failed to be created!");
+
+ let res = utils::run_shell_command(
+ &format!("cd .glam.d/{} && git init", repo_name),
+ &root,
+ verbose,
+ );
+
+ utils::assert_result(&res, "Repository failed to be initialized!");
+
+ glam_packages.push(GlamPackage {
+ name: repo_name.to_string(),
+ git_repo: "".to_string(),
+ commit: "".to_string(),
+ links: [Link{
+ target_folder: format!("addons/{}", addon_name),
+ source_folder: format!("addons/{}", addon_name),
+ }].to_vec(),
+ });
+
+ glam_object.packages = glam_packages;
+ write_glam_file(&glam_file_path, &glam_object);
+
+ let target_package = glam_object.packages.last_mut().unwrap();
+
+ apply_package_files(&root, &target_package, verbose);
+}
+
pub fn update_repository(root: &str, verbose: bool) {
let glam_file_path = format!("{}/.glam", root);
let mut glam_object = read_glam_file(&glam_file_path);
@@ -250,6 +306,26 @@ pub fn apply_changes(root: &str, verbose: bool) {
write_glam_file(&glam_file_path, &glam_object);
}
+fn find_package_by_link(packages: &Vec<GlamPackage>, addons_folder: &str) -> Option<usize> {
+ let mut package_index = 0;
+ let mut found_package = false;
+
+ for (i, package) in packages.iter().enumerate() {
+ for (_j, link) in package.links.iter().enumerate() {
+ if link.target_folder == addons_folder {
+ package_index = i;
+ found_package = true;
+ }
+ }
+ }
+
+ if found_package {
+ return Some(package_index);
+ }
+
+ return None;
+}
+
fn find_package_by_name(packages: &Vec<GlamPackage>, name: &str) -> Option<usize> {
let mut package_index = 0;
let mut found_package = false;
@@ -286,6 +362,21 @@ fn find_package_by_repository(packages: &Vec<GlamPackage>, repo: &str) -> Option
return None;
}
+fn list_addons(root: &str, verbose: bool) -> Vec<String> {
+ let res = utils::run_shell_command(
+ &format!("ls addons"),
+ &root,
+ verbose,
+ );
+
+ utils::assert_result(&res, "Addons folder doesn't exist!");
+
+ let addon_folders = res.unwrap().trim().to_string();
+ let split = addon_folders.split("\n").collect::<Vec<&str>>();
+
+ return split.iter().map(|s| s.to_string()).collect();
+}
+
fn install_glam_package(
root: &str,
commit: &str,
diff --git a/src/main.rs b/src/main.rs
index 2898f09..e178427 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,6 +22,10 @@ enum Commands {
git_repo: String,
},
+ /// Create a repository from an existing addon
+ Create {
+ },
+
/// Update a repository
Update {},
@@ -49,6 +53,13 @@ fn main() {
}
}
+ Commands::Create { } => {
+ let root = commands::search_project_root();
+ if commands::check_initialization(&root) {
+ commands::create_addon(&root, cli.verbose);
+ }
+ }
+
Commands::Update {} => {
let root = commands::search_project_root();
if commands::check_initialization(&root) {