Add git2 crate for Git integration of init subcommand
This commit is contained in:
		
							parent
							
								
									fbb76bb3d2
								
							
						
					
					
						commit
						0e5f8b9f4b
					
				|  | @ -19,4 +19,5 @@ thiserror = "1.0.58" | |||
| toml = "0.8.12" | ||||
| shulkerscript-lang = {path = "../shulkerscript-lang", features = ["shulkerbox"], default-features = false} | ||||
| shulkerbox = {path = "../shulkerbox", default-features = false} | ||||
| git2 = { version = "0.18.3", default-features = false } | ||||
| 
 | ||||
|  |  | |||
|  | @ -18,6 +18,8 @@ pub enum Error { | |||
|     InvalidPackPathError(PathBuf), | ||||
|     #[error("An error occured while compiling the project.")] | ||||
|     ShulkerScriptError(#[from] shulkerscript_lang::base::Error), | ||||
|     #[error("An error occured during a git action.")] | ||||
|     GitError(#[from] git2::Error), | ||||
| } | ||||
| 
 | ||||
| pub type Result<T> = std::result::Result<T, Error>; | ||||
|  |  | |||
|  | @ -3,6 +3,9 @@ use std::{ | |||
|     path::{Path, PathBuf}, | ||||
| }; | ||||
| 
 | ||||
| use clap::ValueEnum; | ||||
| use git2::Repository; | ||||
| 
 | ||||
| use crate::{ | ||||
|     config::ProjectConfig, | ||||
|     error::{Error, Result}, | ||||
|  | @ -27,6 +30,15 @@ pub struct InitArgs { | |||
|     /// Force initialization even if the directory is not empty.
 | ||||
|     #[clap(short, long)] | ||||
|     force: bool, | ||||
|     #[clap(long, default_value = "git")] | ||||
|     vcs: VersionControlSystem, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone, Copy, Default, ValueEnum)] | ||||
| enum VersionControlSystem { | ||||
|     #[default] | ||||
|     Git, | ||||
|     None, | ||||
| } | ||||
| 
 | ||||
| pub fn init(verbose: bool, args: &InitArgs) -> Result<()> { | ||||
|  | @ -72,6 +84,8 @@ pub fn init(verbose: bool, args: &InitArgs) -> Result<()> { | |||
|             verbose, | ||||
|         )?; | ||||
| 
 | ||||
|         initalize_vcs(path, args.vcs, verbose)?; | ||||
| 
 | ||||
|         print_success("Project initialized successfully."); | ||||
| 
 | ||||
|         Ok(()) | ||||
|  | @ -165,6 +179,21 @@ fn create_main_file(path: &Path, namespace: &str, verbose: bool) -> std::io::Res | |||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| fn initalize_vcs(path: &Path, vcs: VersionControlSystem, verbose: bool) -> Result<()> { | ||||
|     match vcs { | ||||
|         VersionControlSystem::None => Ok(()), | ||||
|         VersionControlSystem::Git => { | ||||
|             if verbose { | ||||
|                 print_info("Initializing a new Git repository..."); | ||||
|             } | ||||
|             Repository::init(path)?; | ||||
|             print_info("Initialized a new Git repository."); | ||||
| 
 | ||||
|             Ok(()) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn name_to_namespace(name: &str) -> String { | ||||
|     const VALID_CHARS: &str = "0123456789abcdefghijklmnopqrstuvwxyz_-."; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue