9
9
"flag"
10
10
"fmt"
11
11
"io"
12
+ "os"
12
13
"path/filepath"
13
14
14
15
"golang.org/x/benchmarks/sweet/cli/assets"
@@ -32,6 +33,7 @@ type getCmd struct {
32
33
cache string
33
34
copyDir string
34
35
version string
36
+ clean bool
35
37
}
36
38
37
39
func (* getCmd ) Name () string { return "get" }
@@ -44,12 +46,37 @@ func (c *getCmd) SetFlags(f *flag.FlagSet) {
44
46
f .StringVar (& c .cache , "cache" , assets .CacheDefault (), "cache location for assets" )
45
47
f .StringVar (& c .version , "version" , common .Version , "the version to download assets for" )
46
48
f .StringVar (& c .copyDir , "copy" , "" , "location to extract assets into, useful for development" )
49
+ f .BoolVar (& c .clean , "clean" , false , "delete all cached assets before installing new ones" )
47
50
}
48
51
49
52
func (c * getCmd ) Run (_ []string ) error {
50
53
log .SetActivityLog (true )
51
54
ctx := context .Background ()
52
55
56
+ // Do some cleanup, if needed.
57
+ if c .clean {
58
+ for {
59
+ log .Printf ("Deleting cache directory %s" , c .cache )
60
+ fmt .Print ("This is a destructive action. Please confirm. (y/n): " )
61
+ var r string
62
+ _ , err := fmt .Scanf ("%s\n " , & r )
63
+ if err != nil {
64
+ fmt .Printf ("Invalid input: %v\n " , err )
65
+ } else {
66
+ if r == "y" {
67
+ break
68
+ } else if r == "n" {
69
+ return nil
70
+ } else {
71
+ fmt .Println ("Input must be exactly 'y' or 'n'." )
72
+ }
73
+ }
74
+ }
75
+ if err := os .RemoveAll (c .cache ); err != nil {
76
+ return fmt .Errorf ("failed to delete cache directory %s: %v" , c .cache , err )
77
+ }
78
+ }
79
+
53
80
// Load CIPD options, including auth, cache dir, etc. from env. The package is public, but we
54
81
// want to be authenticated transparently when we pull the assets down on the builders.
55
82
var opts cipd.ClientOptions
0 commit comments