fix(depot): exit 64 on unset DEPOT_DIR, count push transport failures
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+17
-3
@@ -3,6 +3,7 @@ package depot
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -60,18 +61,30 @@ func printRunUsage(w io.Writer) {
|
||||
`)
|
||||
}
|
||||
|
||||
// errUsage marks errors that are the caller's fault (usage, exit 64) rather
|
||||
// than internal/backend failures (exit 70).
|
||||
var errUsage = errors.New("usage error")
|
||||
|
||||
// resolveBackend builds the named backend, resolving "local" against DEPOT_DIR.
|
||||
func resolveBackend(target string, getenv func(string) string, cfg Config) (Backend, error) {
|
||||
root := ""
|
||||
if target == "local" {
|
||||
root = getenv("DEPOT_DIR")
|
||||
if root == "" {
|
||||
return nil, fmt.Errorf("--target local requires DEPOT_DIR to be set")
|
||||
return nil, fmt.Errorf("--target local requires DEPOT_DIR to be set: %w", errUsage)
|
||||
}
|
||||
}
|
||||
return NewBackend(target, root, cfg)
|
||||
}
|
||||
|
||||
// backendErrExit maps a resolveBackend error onto the exit contract.
|
||||
func backendErrExit(err error) int {
|
||||
if errors.Is(err, errUsage) {
|
||||
return exitUsage
|
||||
}
|
||||
return exitInternal
|
||||
}
|
||||
|
||||
func printSweepStatus(stdout io.Writer, referenced int, res SweepResult) {
|
||||
fmt.Fprintf(stdout, "referenced=%d present=%d missing=%d unconfirmed=%d\n",
|
||||
referenced, len(res.Present), len(res.Missing), len(res.Unconfirmed))
|
||||
@@ -120,7 +133,7 @@ func runStatus(args []string, stdout, stderr io.Writer, getenv func(string) stri
|
||||
backend, err := resolveBackend(*target, getenv, cfg)
|
||||
if err != nil {
|
||||
fmt.Fprintln(stderr, "depot status:", err)
|
||||
return exitInternal
|
||||
return backendErrExit(err)
|
||||
}
|
||||
|
||||
shaSizes, err := ReferencedSHAs(*manifests)
|
||||
@@ -199,6 +212,7 @@ func runPush(args []string, stdout, stderr io.Writer, getenv func(string) string
|
||||
}
|
||||
if err := backend.Put(context.Background(), sha, srcPath); err != nil {
|
||||
mu.Lock()
|
||||
failed++
|
||||
if transportErr == nil {
|
||||
transportErr = err
|
||||
}
|
||||
@@ -318,7 +332,7 @@ func runGet(args []string, stdout, stderr io.Writer, getenv func(string) string)
|
||||
backend, err := resolveBackend(*target, getenv, cfg)
|
||||
if err != nil {
|
||||
fmt.Fprintln(stderr, "depot get:", err)
|
||||
return exitInternal
|
||||
return backendErrExit(err)
|
||||
}
|
||||
|
||||
if err := backend.Get(context.Background(), sha, dest); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user