Add --force/-f flag to init, for creation in non-empty dir (#1065)
This commit is contained in:
		
							parent
							
								
									ade442a487
								
							
						
					
					
						commit
						530f918955
					
				| @ -20,6 +20,8 @@ $ zola init | ||||
| 
 | ||||
| If the `my_site` directory already exists, Zola will only populate it if it contains only hidden files (dotfiles are ignored). If no `my_site` argument is passed, Zola will try to populate the current directory. | ||||
| 
 | ||||
| In case you want to attempt to populate a non-empty directory and are brave, you can use `zola init --force`. Note that this will _not_ overwrite existing folders or files; in those cases you will get a `File exists (os error 17)` error or similar. | ||||
| 
 | ||||
| You can initialize a git repository and a Zola site directly from within a new folder: | ||||
| 
 | ||||
| ```bash | ||||
|  | ||||
							
								
								
									
										10
									
								
								src/cli.rs
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/cli.rs
									
									
									
									
									
								
							| @ -24,11 +24,15 @@ pub fn build_cli() -> App<'static, 'static> { | ||||
|         .subcommands(vec![ | ||||
|             SubCommand::with_name("init") | ||||
|                 .about("Create a new Zola project") | ||||
|                 .arg( | ||||
|                 .args(&[ | ||||
|                     Arg::with_name("name") | ||||
|                         .default_value(".") | ||||
|                         .help("Name of the project. Will create a new directory with that name in the current directory") | ||||
|                 ), | ||||
|                         .help("Name of the project. Will create a new directory with that name in the current directory"), | ||||
|                     Arg::with_name("force") | ||||
|                         .short("f") | ||||
|                         .takes_value(false) | ||||
|                         .help("Force creation of project even if directory is non-empty") | ||||
|                 ]), | ||||
|             SubCommand::with_name("build") | ||||
|                 .about("Deletes the output directory if there is one and builds the site") | ||||
|                 .args(&[ | ||||
|  | ||||
| @ -56,10 +56,11 @@ pub fn is_directory_quasi_empty(path: &Path) -> Result<bool> { | ||||
|     Ok(false) | ||||
| } | ||||
| 
 | ||||
| pub fn create_new_project(name: &str) -> Result<()> { | ||||
| pub fn create_new_project(name: &str, force: bool) -> Result<()> { | ||||
|     let path = Path::new(name); | ||||
| 
 | ||||
|     // Better error message than the rust default
 | ||||
|     if path.exists() && !is_directory_quasi_empty(&path)? { | ||||
|     if path.exists() && !is_directory_quasi_empty(&path)? && !force { | ||||
|         if name == "." { | ||||
|             bail!("The current directory is not an empty folder (hidden files are ignored)."); | ||||
|         } else { | ||||
|  | ||||
| @ -23,7 +23,8 @@ fn main() { | ||||
| 
 | ||||
|     match matches.subcommand() { | ||||
|         ("init", Some(matches)) => { | ||||
|             match cmd::create_new_project(matches.value_of("name").unwrap()) { | ||||
|             let force = matches.is_present("force"); | ||||
|             match cmd::create_new_project(matches.value_of("name").unwrap(), force) { | ||||
|                 Ok(()) => (), | ||||
|                 Err(e) => { | ||||
|                     console::unravel_errors("Failed to create the project", &e); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user