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  }