From ab5b7bc08653a3f4371bb7f1108ff816483fe290 Mon Sep 17 00:00:00 2001 From: Sonia Hamilton Date: Sun, 11 Jul 2021 16:35:54 +1000 Subject: [PATCH] Add -rm flag to remove target output file (#151) File is removed before mock generation, if it exists. This is useful when the mock generation is likely to fail due to some reason, for example, package load failure due to change in the interface being mocked (the existing mock is no longer valid and cannot be compiled). In such cases, the -rm flag can be used instead of manually removing the file (which could have fixed the issue). --- main.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/main.go b/main.go index 62fb28f..37c3937 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ type userFlags struct { formatter string stubImpl bool skipEnsure bool + remove bool args []string } @@ -35,6 +36,7 @@ func main() { printVersion := flag.Bool("version", false, "show the version for moq") flag.BoolVar(&flags.skipEnsure, "skip-ensure", false, "suppress mock implementation check, avoid import cycle if mocks generated outside of the tested package") + flag.BoolVar(&flags.remove, "rm", false, "first remove output file, if it exists") flag.Usage = func() { fmt.Println(`moq [flags] source-dir interface [interface2 [interface3 [...]]]`) @@ -63,6 +65,14 @@ func run(flags userFlags) error { return errors.New("not enough arguments") } + if flags.remove && flags.outFile != "" { + if err := os.Remove(flags.outFile); err != nil { + if !errors.Is(err, os.ErrNotExist) { + return err + } + } + } + var buf bytes.Buffer var out io.Writer = os.Stdout if flags.outFile != "" {