1packagecmd 2 3import( 4"fmt" 5"os" 6"path/filepath" 7"strings" 8 9"github.com/spf13/cobra"10)1112funcNewCmdLink()*cobra.Command{13varflagsstruct{14forcebool15}1617cmd:=&cobra.Command{18Use:"link <source> <target>",19Aliases:[]string{"ln"},20Args:cobra.ExactArgs(2),21Short:"Create symbolic links",22RunE:func(cmd*cobra.Command,args[]string)error{23source,err:=filepath.Abs(args[0])24iferr!=nil{25returnfmt.Errorf("failed to get absolute path for source: %w",err)26}2728if_,err:=os.Stat(source);err!=nil{29returnfmt.Errorf("source does not exist: %w",err)30}3132if!strings.HasPrefix(source,k.String("dir")){33returnfmt.Errorf("source must be inside the smallweb directory")34}3536target,err:=filepath.Abs(args[1])37iferr!=nil{38returnfmt.Errorf("failed to get absolute path for target: %w",err)39}4041// if target is inside the smallweb directory, create a relative symlink42ifstrings.HasPrefix(target,k.String("dir")){43relative,err:=filepath.Rel(filepath.Dir(target),source)44iferr!=nil{45returnfmt.Errorf("failed to get relative path: %w",err)46}4748ifflags.force{49iferr:=os.Remove(target);err!=nil&&!os.IsNotExist(err){50returnfmt.Errorf("failed to remove existing target: %w",err)51}52}5354iferr:=os.Symlink(relative,target);err!=nil{55returnfmt.Errorf("failed to create symbolic link: %w",err)56}5758returnnil59}6061// if target is outside the smallweb directory, create an absolute symlink62iferr:=os.Symlink(source,target);err!=nil{63returnfmt.Errorf("failed to create symbolic link: %w",err)64}6566returnnil67},68}6970cmd.Flags().BoolVarP(&flags.force,"force","f",false,"Force overwrite existing symlinks")7172returncmd73}