@@ -10,6 +10,10 @@ import (
1010)
1111
1212func NewCmdLink () * cobra.Command {
13+ var flags struct {
14+ force bool
15+ }
16+
1317 cmd := & cobra.Command {
1418 Use : "link <source> <target>" ,
1519 Aliases : []string {"ln" },
@@ -34,17 +38,19 @@ func NewCmdLink() *cobra.Command {
3438 return fmt .Errorf ("failed to get absolute path for target: %w" , err )
3539 }
3640
37- if _ , err := os .Stat (target ); err == nil {
38- return fmt .Errorf ("target already exists" )
39- }
40-
4141 // if target is inside the smallweb directory, create a relative symlink
4242 if strings .HasPrefix (target , k .String ("dir" )) {
4343 relative , err := filepath .Rel (filepath .Dir (target ), source )
4444 if err != nil {
4545 return fmt .Errorf ("failed to get relative path: %w" , err )
4646 }
4747
48+ if flags .force {
49+ if err := os .Remove (target ); err != nil && ! os .IsNotExist (err ) {
50+ return fmt .Errorf ("failed to remove existing target: %w" , err )
51+ }
52+ }
53+
4854 if err := os .Symlink (relative , target ); err != nil {
4955 return fmt .Errorf ("failed to create symbolic link: %w" , err )
5056 }
@@ -61,5 +67,7 @@ func NewCmdLink() *cobra.Command {
6167 },
6268 }
6369
70+ cmd .Flags ().BoolVarP (& flags .force , "force" , "f" , false , "Force overwrite existing symlinks" )
71+
6472 return cmd
6573}
0 commit comments