// Copyright Earl Warren // Copyright Loïc Dachary // SPDX-License-Identifier: MIT package forgejo import ( "context" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/services/f3/util" _ "code.gitea.io/gitea/services/f3/driver" // register the driver f3_cmd "code.forgejo.org/f3/gof3/v3/cmd" f3_logger "code.forgejo.org/f3/gof3/v3/logger" f3_util "code.forgejo.org/f3/gof3/v3/util" "github.com/urfave/cli/v2" ) func CmdF3(ctx context.Context) *cli.Command { ctx = f3_logger.ContextSetLogger(ctx, util.NewF3Logger(nil, log.GetLogger(log.DEFAULT))) return &cli.Command{ Name: "f3", Usage: "F3", Subcommands: []*cli.Command{ SubcmdF3Mirror(ctx), }, } } func SubcmdF3Mirror(ctx context.Context) *cli.Command { mirrorCmd := f3_cmd.CreateCmdMirror(ctx) mirrorCmd.Before = prepareWorkPathAndCustomConf(ctx) f3Action := mirrorCmd.Action mirrorCmd.Action = func(c *cli.Context) error { return runMirror(ctx, c, f3Action) } return mirrorCmd } func runMirror(ctx context.Context, c *cli.Context, action cli.ActionFunc) error { var cancel context.CancelFunc if !ContextGetNoInit(ctx) { ctx, cancel = installSignals(ctx) defer cancel() if err := initDB(ctx); err != nil { return err } if err := storage.Init(); err != nil { return err } if err := git.InitSimple(ctx); err != nil { return err } if err := models.Init(ctx); err != nil { return err } } err := action(c) if panicError, ok := err.(f3_util.PanicError); ok { log.Debug("F3 Stack trace\n%s", panicError.Stack()) } return err }