diff --git a/main.go b/main.go index 9423a6d..28b23d4 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( + "bufio" "bytes" "context" "embed" @@ -300,8 +301,24 @@ func (b *buildCmd) rescanProjectFiles() error { } func (b *buildCmd) do() error { - if err := os.RemoveAll(b.outDir); err != nil { - return fmt.Errorf("removing build dir: %w", err) + if dirExists(b.outDir) { + if files, err := os.ReadDir(b.outDir); err != nil { + return fmt.Errorf("reading directory: %w", err) + } else if len(files) > 0 { + fmt.Printf("The build directory %s is not empty\nWould you like to remove all files? (y/N) ", b.outDir) + reader := bufio.NewReader(os.Stdin) + input, err := reader.ReadString('\n') + if err != nil { + return fmt.Errorf("unable to get user input: %w", err) + } + if input == "y\n" || input == "Y\n" { + if err := os.RemoveAll(b.outDir); err != nil { + return fmt.Errorf("removing build dir: %w", err) + } + } else { + return fmt.Errorf("user chose not to clear build directory") + } + } } // FIXME(paulsmith): remove singleFile (and -single flag) and replace with diff --git a/main_test.go b/main_test.go index 3a91b24..916b783 100644 --- a/main_test.go +++ b/main_test.go @@ -270,6 +270,7 @@ func TestPushup(t *testing.T) { g.Wait() close(ready) close(done) + os.RemoveAll("build") }() if err := g.Wait(); err != nil {