+12
-4
cmd/link.go
+12
-4
cmd/link.go
···
10
10
)
11
11
12
12
func NewCmdLink() *cobra.Command {
13
+
var flags struct {
14
+
force bool
15
+
}
16
+
13
17
cmd := &cobra.Command{
14
18
Use: "link <source> <target>",
15
19
Aliases: []string{"ln"},
···
32
36
target, err := filepath.Abs(args[1])
33
37
if err != nil {
34
38
return fmt.Errorf("failed to get absolute path for target: %w", err)
35
-
}
36
-
37
-
if _, err := os.Stat(target); err == nil {
38
-
return fmt.Errorf("target already exists")
39
39
}
40
40
41
41
// if target is inside the smallweb directory, create a relative symlink
···
45
45
return fmt.Errorf("failed to get relative path: %w", err)
46
46
}
47
47
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
+
48
54
if err := os.Symlink(relative, target); err != nil {
49
55
return fmt.Errorf("failed to create symbolic link: %w", err)
50
56
}
···
60
66
return nil
61
67
},
62
68
}
69
+
70
+
cmd.Flags().BoolVarP(&flags.force, "force", "f", false, "Force overwrite existing symlinks")
63
71
64
72
return cmd
65
73
}