@@ -65,7 +65,7 @@ func Main(args []string) error {
6565 if err := fleetAllCuttlefishHosts (ccm ); err != nil {
6666 return err
6767 }
68- case "help" , "lint" , "login" , "version" :
68+ case "cache" , " help" , "lint" , "login" , "version" :
6969 if err := handleToolingSubcommands (ccm , cvdArgs ); err != nil {
7070 return err
7171 }
@@ -75,9 +75,6 @@ func Main(args []string) error {
7575 }
7676 case "setup" :
7777 return setupPodcvd ()
78- case "cache" :
79- // TODO(seungjaeyoo): Support other subcommands of cvd as well.
80- return fmt .Errorf ("subcommand %q is not implemented yet" , subcommand )
8178 default :
8279 return fmt .Errorf ("unknown subcommand %q" , subcommand )
8380 }
@@ -354,6 +351,10 @@ func handleToolingSubcommands(ccm CuttlefishContainerManager, cvdArgs *CvdArgs)
354351 }
355352 subcommand := cvdArgs .SubCommandArgs [0 ]
356353 switch subcommand {
354+ case "cache" :
355+ if err := handleCacheExecution (ccm , cvdArgs ); err != nil {
356+ return err
357+ }
357358 case "lint" :
358359 if err := handleLintExecution (ccm , cvdArgs ); err != nil {
359360 return err
@@ -368,6 +369,34 @@ func handleToolingSubcommands(ccm CuttlefishContainerManager, cvdArgs *CvdArgs)
368369 return nil
369370}
370371
372+ func handleCacheExecution (ccm CuttlefishContainerManager , cvdArgs * CvdArgs ) error {
373+ cacheDir := hostCacheDir ()
374+
375+ if len (cvdArgs .SubCommandArgs ) > 1 && cvdArgs .SubCommandArgs [1 ] == "empty" {
376+ entries , err := os .ReadDir (cacheDir )
377+ if err != nil && ! os .IsNotExist (err ) {
378+ return fmt .Errorf ("failed to empty cache directory %q: %w" , cacheDir , err )
379+ }
380+ for _ , entry := range entries {
381+ if err := os .RemoveAll (filepath .Join (cacheDir , entry .Name ())); err != nil {
382+ return fmt .Errorf ("failed to empty cache directory %q: %w" , cacheDir , err )
383+ }
384+ }
385+ fmt .Printf ("Cache at %q has been emptied\n " , cacheDir )
386+ return nil
387+ }
388+
389+ args := append ([]string {"cvd" }, cvdArgs .SerializeCommonArgs ()... )
390+ args = append (args , cvdArgs .SubCommandArgs ... )
391+ var stdoutBuf bytes.Buffer
392+ if err := ccm .ExecOnContainer (context .Background (), ToolingContainerName , args , os .Stdin , & stdoutBuf , os .Stderr ); err != nil {
393+ return err
394+ }
395+ translatedOutput := strings .ReplaceAll (stdoutBuf .String (), "/var/tmp/cvd/0/cache" , cacheDir )
396+ _ , err := os .Stdout .WriteString (translatedOutput )
397+ return err
398+ }
399+
371400func handleLintExecution (ccm CuttlefishContainerManager , cvdArgs * CvdArgs ) error {
372401 if len (cvdArgs .SubCommandArgs ) < 2 {
373402 return fmt .Errorf ("missing JSON config file path" )
0 commit comments