Skip to content

Commit ab93284

Browse files
committed
podcvd supports cache subcommand
1 parent 5e9a2fa commit ab93284

1 file changed

Lines changed: 33 additions & 4 deletions

File tree

  • container/src/podcvd/internal

container/src/podcvd/internal/main.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
371400
func handleLintExecution(ccm CuttlefishContainerManager, cvdArgs *CvdArgs) error {
372401
if len(cvdArgs.SubCommandArgs) < 2 {
373402
return fmt.Errorf("missing JSON config file path")

0 commit comments

Comments
 (0)