mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-21 07:59:03 +00:00
8970fa2bf8
As the docs of codeberg refer to the strings printed by the Forgejo ssh servers, this is user-facing and is nice to update to the new product name. (cherry picked from commit103991d73f
) (cherry picked from commit2a0d3f85f1
) (cherry picked from commiteb2b4ce388
) (cherry picked from commit0998b51716
) [BRANDING] forgejo log message (cherry picked from commitd51a046ebe
) (cherry picked from commitd66e1c7b6e
) (cherry picked from commitb5bffe4ce8
) (cherry picked from commit3fa776d856
) (cherry picked from commit18d064f472
) (cherry picked from commitc95094e355
) (cherry picked from commit5784290bc4
) (cherry picked from commitaee336886b
) (cherry picked from commitec2f60b516
) (cherry picked from commit7af742a284
) (cherry picked from commitf279e2a264
) (cherry picked from commitfd38cfb14e
) (cherry picked from commit64c8226618
) (cherry picked from commitb546fb2304
) (cherry picked from commitad10202177
) (cherry picked from commitc89cab9c2b
) (cherry picked from commit9579322ec2
) (cherry picked from commit16b44ad18d
) (cherry picked from commit2571ff703b
) (cherry picked from commitad61d9ce9b
) (cherry picked from commit9b2c45d4d3
) (cherry picked from commited01b79a59
) (cherry picked from commitd040b66427
) (cherry picked from commitffe0bbea48
) (cherry picked from commit4c1b2c409b
) (cherry picked from commit3d8338ed10
) (cherry picked from commita92f044ea9
) [BRANDING] link to forgejo.org/docs instead of docs.gitea.io (cherry picked from commit3efafd0e08
) (cherry picked from commit148185e34b
) (cherry picked from commit834e264698
) (cherry picked from commite72fa6eb1e
) [BRANDING] link to forgejo.org/docs instead of docs.gitea.io Fix the link that was 404. (cherry picked from commitae515d7258
) (cherry picked from commitfacc2367f0
) (cherry picked from commit25784b9f21
) (cherry picked from commit2efc6138d9
) (cherry picked from commitb9d0871631
) (cherry picked from commitf0446e51b9
) (cherry picked from commit1638aa67fb
) (cherry picked from commit290db6a018
) (cherry picked from commit89b87cf542
) (cherry picked from commit656ed94962
) (cherry picked from commit036f879f96
) (cherry picked from commit69eea35f81
) (cherry picked from commitb72e3f4a92
) (cherry picked from commitaf606b8574
) (cherry picked from commit7e47f8135c
) (cherry picked from commit0e5218cc53
) (cherry picked from commit7c2a20a528
) (cherry picked from commit4e94006363
) (cherry picked from commite47cdfc43f
) (cherry picked from commit1dcb3e1da4
) (cherry picked from commit67367c4e0f
) (cherry picked from commit252087d1ff
) (cherry picked from commitf5977a43e5
) Conflicts: templates/base/head_navbar.tmpl https://codeberg.org/forgejo/forgejo/pulls/1351 (cherry picked from commit594938eb15
) (cherry picked from commit0257d038a7
) (cherry picked from commit72821dd140
) [BRANDING] s/gitea/forgejo/ in HTML placeholders Replaced Gitea branding with Forgejo for input placeholders Closes: #686 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/752 (cherry picked from commit6160d37ca9
) (cherry picked from commitdf61138c7e
) (cherry picked from commit1f30566c3f
) (cherry picked from commit539bb825f5
) (cherry picked from commitbee0f66c86
) (cherry picked from commit60ad005c95
) (cherry picked from commit282e26222e
) (cherry picked from commitf9ca551f3d
) (cherry picked from commitb2e04b04c3
) (cherry picked from commitc8f395a03c
) (cherry picked from commit0d58ce49ae
) (cherry picked from commitc602ddf91e
) (cherry picked from commit029e37271e
) (cherry picked from commitfdaa96b3cc
) (cherry picked from commit515d99e27d
) (cherry picked from commitda73274ba1
) (cherry picked from commitce90b696a0
) (cherry picked from commitb6bf98763b
) (cherry picked from commit5b380d22d7
) [BRANDING] How to start a runner: URL to Actions admin documentation (cherry picked from commitda91799e6f
) (cherry picked from commit28231663b6
) (cherry picked from commit533a90345b
) (cherry picked from commit6a0e4e55dd
) (cherry picked from commitf47cd611c6
) (cherry picked from commit001264b784
) (cherry picked from commite4099e9bb9
) (cherry picked from commit3a1885649f
) (cherry picked from commitc42802c710
) (cherry picked from commita611ce8d6d
) (cherry picked from commita3d7d10a80
) (cherry picked from commit52adde671f
) (cherry picked from commitc9a3820fef
) (cherry picked from commitdce40997c9
) (cherry picked from commit312a6b92f3
) [BRANDING] package templates & links - Change Gitea to Forgejo where necessary. - Point all documentation to Forgejo's documentation. - Resolves #992 (cherry picked from commitd0b78a6ede
) (cherry picked from commite2382f30ba
) (cherry picked from commitc41cf05a33
) (cherry picked from commit797e598ae7
) (cherry picked from commit970031a1c2
) (cherry picked from commit0c1180e2e1
) Conflicts: templates/package/content/alpine.tmpl templates/package/content/cargo.tmpl templates/package/content/chef.tmpl templates/package/content/composer.tmpl templates/package/content/conan.tmpl templates/package/content/conda.tmpl templates/package/content/container.tmpl templates/package/content/cran.tmpl templates/package/content/debian.tmpl templates/package/content/generic.tmpl templates/package/content/go.tmpl templates/package/content/helm.tmpl templates/package/content/maven.tmpl templates/package/content/npm.tmpl templates/package/content/nuget.tmpl templates/package/content/pub.tmpl templates/package/content/pypi.tmpl templates/package/content/rpm.tmpl templates/package/content/rubygems.tmpl templates/package/content/swift.tmpl templates/package/content/vagrant.tmpl https://codeberg.org/forgejo/forgejo/pulls/1351 (cherry picked from commit42ac9ff2ab
) (cherry picked from commite390000bce
) (cherry picked from commit56a437b29b
) Conflicts: templates/package/content/cargo.tmpl https://codeberg.org/forgejo/forgejo/pulls/1466 [BRANDING] s/Gitea/Forgejo/ in user visible help & comments - Modify the README of the docker directory to point to the relevant docker files and documentation for Forgejo. (cherry picked from commitaca6371215
) (cherry picked from commit0ba96b1bc4
) (cherry picked from commit5c8e6b53f1
) Conflicts: docker/README.md https://codeberg.org/forgejo/forgejo/pulls/1351 (cherry picked from commitb3121c8004
) (cherry picked from commit607f870416
) (cherry picked from commit191d96afe4
) [BRANDING] healthcheck/check.go (cherry picked from commitd703a236ce
) (cherry picked from commitd84ce3ff20
) (cherry picked from commit2dbb844606
) (cherry picked from commit14d3ae7e3a
) [BRANDING] s/Gitea/Forgejo/g in CLI output (cherry picked from commit7543c126bb
) (cherry picked from commitb66f422fc3
) (cherry picked from commita81e4e46f3
) [BRANDING] Gitea->Forgejo in mailer code (cherry picked from commitb91afea4ff
) (cherry picked from commit5d7428167c
) (cherry picked from commited8101ba6c
) [BRANDING] use 'Forgejo' for Discord, Packagist, and Slack webhooks Refs: https://codeberg.org/forgejo/forgejo/issues/1387 (cherry picked from commit7dc3a05f5b
) (cherry picked from commit133f2fc6cc
) [BRANDING] cmd/manager.go (cherry picked from commitd1dba2c79d
) [BRANDING] pyproject.toml (cherry picked from commit7e8c868db2
) (cherry picked from commit2395995c8b
) (cherry picked from commitdd6fbbf332
) Conflicts: templates/package/content/cargo.tmpl https://codeberg.org/forgejo/forgejo/pulls/1548 (cherry picked from commit6f9a5d5cab
) (cherry picked from commitd0635c4a07
) (cherry picked from commit5f9a8c5744
) (cherry picked from commit10b96c4567
) (cherry picked from commit717d52e928
) (cherry picked from commit5debdb103e
) (cherry picked from commitded1c1700e
) (cherry picked from commit52aa23cf7a
) (cherry picked from commit882c942b06
) (cherry picked from commit73fc2d2ea8
) Conflicts: cmd/actions.go cmd/doctor.go cmd/keys.go https://codeberg.org/forgejo/forgejo/pulls/1976 (cherry picked from commit6180ef24dc
)
220 lines
6.2 KiB
Go
220 lines
6.2 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
golog "log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/tabwriter"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/models/migrations"
|
|
migrate_base "code.gitea.io/gitea/models/migrations/base"
|
|
"code.gitea.io/gitea/modules/container"
|
|
"code.gitea.io/gitea/modules/doctor"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
// CmdDoctor represents the available doctor sub-command.
|
|
var CmdDoctor = &cli.Command{
|
|
Name: "doctor",
|
|
Usage: "Diagnose and optionally fix problems, convert or re-create database tables",
|
|
Description: "A command to diagnose problems with the current Forgejo instance according to the given configuration. Some problems can optionally be fixed by modifying the database or data storage.",
|
|
|
|
Subcommands: []*cli.Command{
|
|
cmdDoctorCheck,
|
|
cmdRecreateTable,
|
|
cmdDoctorConvert,
|
|
},
|
|
}
|
|
|
|
var cmdDoctorCheck = &cli.Command{
|
|
Name: "check",
|
|
Usage: "Diagnose and optionally fix problems",
|
|
Description: "A command to diagnose problems with the current Forgejo instance according to the given configuration. Some problems can optionally be fixed by modifying the database or data storage.",
|
|
Action: runDoctorCheck,
|
|
Flags: []cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: "list",
|
|
Usage: "List the available checks",
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "default",
|
|
Usage: "Run the default checks (if neither --run or --all is set, this is the default behaviour)",
|
|
},
|
|
&cli.StringSliceFlag{
|
|
Name: "run",
|
|
Usage: "Run the provided checks - (if --default is set, the default checks will also run)",
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "all",
|
|
Usage: "Run all the available checks",
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "fix",
|
|
Usage: "Automatically fix what we can",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "log-file",
|
|
Usage: `Name of the log file (no verbose log output by default). Set to "-" to output to stdout`,
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "color",
|
|
Aliases: []string{"H"},
|
|
Usage: "Use color for outputted information",
|
|
},
|
|
},
|
|
}
|
|
|
|
var cmdRecreateTable = &cli.Command{
|
|
Name: "recreate-table",
|
|
Usage: "Recreate tables from XORM definitions and copy the data.",
|
|
ArgsUsage: "[TABLE]... : (TABLEs to recreate - leave blank for all)",
|
|
Flags: []cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "Print SQL commands sent",
|
|
},
|
|
},
|
|
Description: `The database definitions Forgejo uses change across versions, sometimes changing default values and leaving old unused columns.
|
|
|
|
This command will cause Xorm to recreate tables, copying over the data and deleting the old table.
|
|
|
|
You should back-up your database before doing this and ensure that your database is up-to-date first.`,
|
|
Action: runRecreateTable,
|
|
}
|
|
|
|
func runRecreateTable(ctx *cli.Context) error {
|
|
stdCtx, cancel := installSignals()
|
|
defer cancel()
|
|
|
|
// Redirect the default golog to here
|
|
golog.SetFlags(0)
|
|
golog.SetPrefix("")
|
|
golog.SetOutput(log.LoggerToWriter(log.GetLogger(log.DEFAULT).Info))
|
|
|
|
debug := ctx.Bool("debug")
|
|
setting.MustInstalled()
|
|
setting.LoadDBSetting()
|
|
|
|
if debug {
|
|
setting.InitSQLLoggersForCli(log.DEBUG)
|
|
} else {
|
|
setting.InitSQLLoggersForCli(log.INFO)
|
|
}
|
|
|
|
setting.Database.LogSQL = debug
|
|
if err := db.InitEngine(stdCtx); err != nil {
|
|
fmt.Println(err)
|
|
fmt.Println("Check if you are using the right config file. You can use a --config directive to specify one.")
|
|
return nil
|
|
}
|
|
|
|
args := ctx.Args()
|
|
names := make([]string, 0, ctx.NArg())
|
|
for i := 0; i < ctx.NArg(); i++ {
|
|
names = append(names, args.Get(i))
|
|
}
|
|
|
|
beans, err := db.NamesToBean(names...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
recreateTables := migrate_base.RecreateTables(beans...)
|
|
|
|
return db.InitEngineWithMigration(stdCtx, func(x *xorm.Engine) error {
|
|
if err := migrations.EnsureUpToDate(x); err != nil {
|
|
return err
|
|
}
|
|
return recreateTables(x)
|
|
})
|
|
}
|
|
|
|
func setupDoctorDefaultLogger(ctx *cli.Context, colorize bool) {
|
|
// Silence the default loggers
|
|
setupConsoleLogger(log.FATAL, log.CanColorStderr, os.Stderr)
|
|
|
|
logFile := ctx.String("log-file")
|
|
if logFile == "" {
|
|
return // if no doctor log-file is set, do not show any log from default logger
|
|
} else if logFile == "-" {
|
|
setupConsoleLogger(log.TRACE, colorize, os.Stdout)
|
|
} else {
|
|
logFile, _ = filepath.Abs(logFile)
|
|
writeMode := log.WriterMode{Level: log.TRACE, WriterOption: log.WriterFileOption{FileName: logFile}}
|
|
writer, err := log.NewEventWriter("console-to-file", "file", writeMode)
|
|
if err != nil {
|
|
log.FallbackErrorf("unable to create file log writer: %v", err)
|
|
return
|
|
}
|
|
log.GetManager().GetLogger(log.DEFAULT).ReplaceAllWriters(writer)
|
|
}
|
|
}
|
|
|
|
func runDoctorCheck(ctx *cli.Context) error {
|
|
stdCtx, cancel := installSignals()
|
|
defer cancel()
|
|
|
|
colorize := log.CanColorStdout
|
|
if ctx.IsSet("color") {
|
|
colorize = ctx.Bool("color")
|
|
}
|
|
|
|
setupDoctorDefaultLogger(ctx, colorize)
|
|
|
|
// Finally redirect the default golang's log to here
|
|
golog.SetFlags(0)
|
|
golog.SetPrefix("")
|
|
golog.SetOutput(log.LoggerToWriter(log.GetLogger(log.DEFAULT).Info))
|
|
|
|
if ctx.IsSet("list") {
|
|
w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0)
|
|
_, _ = w.Write([]byte("Default\tName\tTitle\n"))
|
|
doctor.SortChecks(doctor.Checks)
|
|
for _, check := range doctor.Checks {
|
|
if check.IsDefault {
|
|
_, _ = w.Write([]byte{'*'})
|
|
}
|
|
_, _ = w.Write([]byte{'\t'})
|
|
_, _ = w.Write([]byte(check.Name))
|
|
_, _ = w.Write([]byte{'\t'})
|
|
_, _ = w.Write([]byte(check.Title))
|
|
_, _ = w.Write([]byte{'\n'})
|
|
}
|
|
return w.Flush()
|
|
}
|
|
|
|
var checks []*doctor.Check
|
|
if ctx.Bool("all") {
|
|
checks = make([]*doctor.Check, len(doctor.Checks))
|
|
copy(checks, doctor.Checks)
|
|
} else if ctx.IsSet("run") {
|
|
addDefault := ctx.Bool("default")
|
|
runNamesSet := container.SetOf(ctx.StringSlice("run")...)
|
|
for _, check := range doctor.Checks {
|
|
if (addDefault && check.IsDefault) || runNamesSet.Contains(check.Name) {
|
|
checks = append(checks, check)
|
|
runNamesSet.Remove(check.Name)
|
|
}
|
|
}
|
|
if len(runNamesSet) > 0 {
|
|
return fmt.Errorf("unknown checks: %q", strings.Join(runNamesSet.Values(), ","))
|
|
}
|
|
} else {
|
|
for _, check := range doctor.Checks {
|
|
if check.IsDefault {
|
|
checks = append(checks, check)
|
|
}
|
|
}
|
|
}
|
|
return doctor.RunChecks(stdCtx, colorize, ctx.Bool("fix"), checks)
|
|
}
|