github.com/x-motemen/ghq@v1.6.1/cmd_rm.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/urfave/cli/v2" 8 ) 9 10 func doRm(c *cli.Context) error { 11 var ( 12 name = c.Args().First() 13 dry = c.Bool("dry-run") 14 w = c.App.Writer 15 bare = c.Bool("bare") 16 ) 17 18 if name == "" { 19 return fmt.Errorf("repository name is required") 20 } 21 22 u, err := newURL(name, false, true) 23 if err != nil { 24 return err 25 } 26 27 localRepo, err := LocalRepositoryFromURL(u, bare) 28 if err != nil { 29 return err 30 } 31 32 p := localRepo.FullPath 33 ok, err := isNotExistOrEmpty(p) 34 if err != nil { 35 return err 36 } 37 if ok { 38 return fmt.Errorf("directory %q does not exist", p) 39 } 40 41 if dry { 42 fmt.Fprintf(w, "Would remove %s\n", p) 43 return nil 44 } 45 46 ok, err = confirm(fmt.Sprintf("Remove %s?", p)) 47 if err != nil { 48 return err 49 } 50 if !ok { 51 return fmt.Errorf("aborted") 52 } 53 54 if err := os.RemoveAll(p); err != nil { 55 return err 56 } 57 58 fmt.Fprintf(w, "Removed %s\n", p) 59 return nil 60 } 61 62 func confirm(message string) (bool, error) { 63 fmt.Fprintf(os.Stderr, "%s [y/N]: ", message) 64 var response string 65 if _, err := fmt.Scanln(&response); err != nil { 66 return false, err 67 } 68 return response == "y", nil 69 }