blob: 67c6b41c3322e878f4f95449f3b7ada2c4e610a7 [file] [log] [blame]
// Copyright 2018 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 fastboot
import (
"context"
"fmt"
"log"
"os/exec"
)
// Fastboot provides a subset of the functionality of the fastboot CLI tool.
type Fastboot struct {
// ToolPath is the path to the fastboot command line tool.
ToolPath string
}
func (f *Fastboot) exec(ctx context.Context, args ...string) ([]byte, error) {
cmd := exec.CommandContext(ctx, f.ToolPath, args...)
log.Printf("running:\n\tArgs: %s\n\tEnv: %s", cmd.Args, cmd.Env)
out, err := cmd.Output()
if ctx.Err() != nil {
return nil, fmt.Errorf("context error: %v", ctx.Err())
}
if err != nil {
// Put the standard error text into the returned error object
if exitError, ok := err.(*exec.ExitError); ok && exitError.Stderr != nil {
return out, fmt.Errorf(string(exitError.Stderr))
}
}
return out, err
}
// Continue is equivalent to the command "fastboot continue".
func (f *Fastboot) Continue(ctx context.Context) ([]byte, error) {
return f.exec(ctx, "continue")
}
// Flash is equivalent to the command "fastboot flash <partition> <image>".
func (f *Fastboot) Flash(ctx context.Context, partition string, image string) ([]byte, error) {
return f.exec(ctx, "flash", partition, image)
}