@@ -23,7 +23,7 @@ use crate::output::{step, with_spinner, Step};
2323use crate :: prompt:: {
2424 get_subgraph_basename, prompt_add_another_contract, prompt_contract_address,
2525 prompt_contract_name, prompt_directory_with_confirm, prompt_start_block,
26- prompt_subgraph_slug_with_confirm, InitForm , SourceType ,
26+ prompt_subgraph_slug_with_confirm, resolve_directory_collision , InitForm , SourceType ,
2727} ;
2828use crate :: scaffold:: { generate_scaffold, init_git, install_dependencies, ScaffoldOptions } ;
2929use crate :: services:: { ContractInfo , ContractService , IpfsClient , NetworksRegistry } ;
@@ -325,7 +325,7 @@ async fn init_from_contract(opt: &InitOpt) -> Result<()> {
325325 . unwrap_or_else ( || format ! ( "user/{}" , contract_name. to_lowercase( ) ) ) ;
326326
327327 // Determine directory
328- let directory = opt. directory . clone ( ) . unwrap_or_else ( || {
328+ let initial_directory = opt. directory . clone ( ) . unwrap_or_else ( || {
329329 PathBuf :: from (
330330 subgraph_name
331331 . split ( '/' )
@@ -334,13 +334,8 @@ async fn init_from_contract(opt: &InitOpt) -> Result<()> {
334334 )
335335 } ) ;
336336
337- // Check if directory already exists
338- if directory. exists ( ) {
339- return Err ( anyhow ! (
340- "Directory '{}' already exists. Please choose a different name or remove the existing directory." ,
341- directory. display( )
342- ) ) ;
343- }
337+ // Resolve directory collision by prompting for a new name if needed
338+ let directory = PathBuf :: from ( resolve_directory_collision ( & initial_directory) ?) ;
344339
345340 // Determine start block
346341 let start_block = opt
@@ -524,7 +519,7 @@ fn init_from_example(opt: &InitOpt) -> Result<()> {
524519 } ;
525520
526521 // Determine directory - prompt if not provided and in terminal
527- let directory = if let Some ( dir) = & opt. directory {
522+ let initial_directory = if let Some ( dir) = & opt. directory {
528523 dir. clone ( )
529524 } else if io:: stdin ( ) . is_terminal ( ) {
530525 let default_dir = get_subgraph_basename ( & subgraph_name) ;
@@ -533,13 +528,8 @@ fn init_from_example(opt: &InitOpt) -> Result<()> {
533528 PathBuf :: from ( get_subgraph_basename ( & subgraph_name) )
534529 } ;
535530
536- // Check if directory already exists
537- if directory. exists ( ) {
538- return Err ( anyhow ! (
539- "Directory '{}' already exists. Please choose a different name or remove the existing directory." ,
540- directory. display( )
541- ) ) ;
542- }
531+ // Resolve directory collision by prompting for a new name if needed
532+ let directory = PathBuf :: from ( resolve_directory_collision ( & initial_directory) ?) ;
543533
544534 // Clone example with spinner
545535 clone_example_with_spinner ( example, & directory) ?;
@@ -948,17 +938,12 @@ async fn init_from_subgraph(opt: &InitOpt) -> Result<()> {
948938 . unwrap_or_else ( || "composed-subgraph" . to_string ( ) ) ;
949939
950940 // Determine directory
951- let directory = opt. directory . clone ( ) . unwrap_or_else ( || {
941+ let initial_directory = opt. directory . clone ( ) . unwrap_or_else ( || {
952942 PathBuf :: from ( subgraph_name. split ( '/' ) . next_back ( ) . unwrap_or ( "subgraph" ) )
953943 } ) ;
954944
955- // Check if directory already exists
956- if directory. exists ( ) {
957- return Err ( anyhow ! (
958- "Directory '{}' already exists. Please choose a different name or remove the existing directory." ,
959- directory. display( )
960- ) ) ;
961- }
945+ // Resolve directory collision by prompting for a new name if needed
946+ let directory = PathBuf :: from ( resolve_directory_collision ( & initial_directory) ?) ;
962947
963948 // Generate scaffold with immutable entities
964949 let scaffold_options = ScaffoldOptions {
0 commit comments