1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
package main
import (
"context"
"flag"
"io"
"os"
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage"
"gitlab.com/gitlab-org/gitaly/v16/internal/log"
)
type subcmd interface {
Flags(*flag.FlagSet)
Run(ctx context.Context, stdin io.Reader, stdout io.Writer) error
}
var subcommands = map[string]subcmd{
"create": &createSubcommand{},
"restore": &restoreSubcommand{},
}
func main() {
log.Configure(log.Loggers, "json", "")
logger := log.Default()
flags := flag.NewFlagSet("gitaly-backup", flag.ExitOnError)
_ = flags.Parse(os.Args)
if flags.NArg() < 2 {
logger.Fatal("missing subcommand")
}
subcmdName := flags.Arg(1)
subcmd, ok := subcommands[subcmdName]
if !ok {
logger.Fatalf("unknown subcommand: %q", flags.Arg(1))
}
subcmdFlags := flag.NewFlagSet(subcmdName, flag.ExitOnError)
subcmd.Flags(subcmdFlags)
_ = subcmdFlags.Parse(flags.Args()[2:])
ctx, err := storage.InjectGitalyServersEnv(context.Background())
if err != nil {
logger.Fatalf("%s", err)
}
if err := subcmd.Run(ctx, os.Stdin, os.Stdout); err != nil {
logger.Fatalf("%s", err)
}
}
|