blob: be10c0b44327940c324cc34f51607894d2d32ff2 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"fmt"
"os/exec"
"strings"
)
type ensureFile struct {
pkg *packageDef
}
func (ef *ensureFile) String() string {
return fmt.Sprintf("%s %s", ef.pkg.Name, ef.pkg.Version)
}
// EnsureArgs is a representation of arguments to a cipd ensure call.
type ensureArgs struct {
installDir string
}
// Return a string slice representation of ensure args.
func (ea *ensureArgs) ToArgs() []string {
return []string{"ensure", "-root", ea.installDir, "-ensure-file", "-"}
}
// Ensure recipe bundle from CIPD at a specified dir for a specified version.
func ensure(ctx context.Context, pkg *packageDef, installDir string) error {
ef := ensureFile{pkg: pkg}
ea := ensureArgs{installDir: installDir}
cmd := exec.CommandContext(ctx, "cipd", ea.ToArgs()...)
cmd.Stdin = strings.NewReader(ef.String())
return cmd.Run()
}