this repo has no description smallweb.run
smallweb
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 73 lines 1.8 kB view raw
1package cmd 2 3import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "strings" 8 9 "github.com/spf13/cobra" 10) 11 12func NewCmdLink() *cobra.Command { 13 var flags struct { 14 force bool 15 } 16 17 cmd := &cobra.Command{ 18 Use: "link <source> <target>", 19 Aliases: []string{"ln"}, 20 Args: cobra.ExactArgs(2), 21 Short: "Create symbolic links", 22 RunE: func(cmd *cobra.Command, args []string) error { 23 source, err := filepath.Abs(args[0]) 24 if err != nil { 25 return fmt.Errorf("failed to get absolute path for source: %w", err) 26 } 27 28 if _, err := os.Stat(source); err != nil { 29 return fmt.Errorf("source does not exist: %w", err) 30 } 31 32 if !strings.HasPrefix(source, k.String("dir")) { 33 return fmt.Errorf("source must be inside the smallweb directory") 34 } 35 36 target, err := filepath.Abs(args[1]) 37 if err != nil { 38 return fmt.Errorf("failed to get absolute path for target: %w", err) 39 } 40 41 // if target is inside the smallweb directory, create a relative symlink 42 if strings.HasPrefix(target, k.String("dir")) { 43 relative, err := filepath.Rel(filepath.Dir(target), source) 44 if err != nil { 45 return fmt.Errorf("failed to get relative path: %w", err) 46 } 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 54 if err := os.Symlink(relative, target); err != nil { 55 return fmt.Errorf("failed to create symbolic link: %w", err) 56 } 57 58 return nil 59 } 60 61 // if target is outside the smallweb directory, create an absolute symlink 62 if err := os.Symlink(source, target); err != nil { 63 return fmt.Errorf("failed to create symbolic link: %w", err) 64 } 65 66 return nil 67 }, 68 } 69 70 cmd.Flags().BoolVarP(&flags.force, "force", "f", false, "Force overwrite existing symlinks") 71 72 return cmd 73}