mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-19 15:27:00 +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
)
215 lines
7 KiB
Go
215 lines
7 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"code.gitea.io/gitea/cmd/forgejo"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
// cmdHelp is our own help subcommand with more information
|
|
// Keep in mind that the "./gitea help"(subcommand) is different from "./gitea --help"(flag), the flag doesn't parse the config or output "DEFAULT CONFIGURATION:" information
|
|
func cmdHelp() *cli.Command {
|
|
c := &cli.Command{
|
|
Name: "help",
|
|
Aliases: []string{"h"},
|
|
Usage: "Shows a list of commands or help for one command",
|
|
ArgsUsage: "[command]",
|
|
Action: func(c *cli.Context) (err error) {
|
|
lineage := c.Lineage() // The order is from child to parent: help, doctor, Gitea, {Command:nil}
|
|
targetCmdIdx := 0
|
|
if c.Command.Name == "help" {
|
|
targetCmdIdx = 1
|
|
}
|
|
if lineage[targetCmdIdx+1].Command != nil {
|
|
err = cli.ShowCommandHelp(lineage[targetCmdIdx+1], lineage[targetCmdIdx].Command.Name)
|
|
} else {
|
|
err = cli.ShowAppHelp(c)
|
|
}
|
|
_, _ = fmt.Fprintf(c.App.Writer, `
|
|
DEFAULT CONFIGURATION:
|
|
AppPath: %s
|
|
WorkPath: %s
|
|
CustomPath: %s
|
|
ConfigFile: %s
|
|
|
|
`, setting.AppPath, setting.AppWorkPath, setting.CustomPath, setting.CustomConf)
|
|
return err
|
|
},
|
|
}
|
|
return c
|
|
}
|
|
|
|
func appGlobalFlags() []cli.Flag {
|
|
return []cli.Flag{
|
|
// make the builtin flags at the top
|
|
cli.HelpFlag,
|
|
|
|
// shared configuration flags, they are for global and for each sub-command at the same time
|
|
// eg: such command is valid: "./gitea --config /tmp/app.ini web --config /tmp/app.ini", while it's discouraged indeed
|
|
// keep in mind that the short flags like "-C", "-c" and "-w" are globally polluted, they can't be used for sub-commands anymore.
|
|
&cli.StringFlag{
|
|
Name: "custom-path",
|
|
Aliases: []string{"C"},
|
|
Usage: "Set custom path (defaults to '{WorkPath}/custom')",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "config",
|
|
Aliases: []string{"c"},
|
|
Value: setting.CustomConf,
|
|
Usage: "Set custom config file (defaults to '{WorkPath}/custom/conf/app.ini')",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "work-path",
|
|
Aliases: []string{"w"},
|
|
Usage: "Set Forgejo's working path (defaults to the directory of the Forgejo binary)",
|
|
},
|
|
}
|
|
}
|
|
|
|
func prepareSubcommandWithConfig(command *cli.Command, globalFlags []cli.Flag) {
|
|
command.Flags = append(append([]cli.Flag{}, globalFlags...), command.Flags...)
|
|
command.Action = prepareWorkPathAndCustomConf(command.Action)
|
|
command.HideHelp = true
|
|
if command.Name != "help" {
|
|
command.Subcommands = append(command.Subcommands, cmdHelp())
|
|
}
|
|
for i := range command.Subcommands {
|
|
prepareSubcommandWithConfig(command.Subcommands[i], globalFlags)
|
|
}
|
|
}
|
|
|
|
// prepareWorkPathAndCustomConf wraps the Action to prepare the work path and custom config
|
|
// It can't use "Before", because each level's sub-command's Before will be called one by one, so the "init" would be done multiple times
|
|
func prepareWorkPathAndCustomConf(action cli.ActionFunc) func(ctx *cli.Context) error {
|
|
return func(ctx *cli.Context) error {
|
|
var args setting.ArgWorkPathAndCustomConf
|
|
// from children to parent, check the global flags
|
|
for _, curCtx := range ctx.Lineage() {
|
|
if curCtx.IsSet("work-path") && args.WorkPath == "" {
|
|
args.WorkPath = curCtx.String("work-path")
|
|
}
|
|
if curCtx.IsSet("custom-path") && args.CustomPath == "" {
|
|
args.CustomPath = curCtx.String("custom-path")
|
|
}
|
|
if curCtx.IsSet("config") && args.CustomConf == "" {
|
|
args.CustomConf = curCtx.String("config")
|
|
}
|
|
}
|
|
setting.InitWorkPathAndCommonConfig(os.Getenv, args)
|
|
if ctx.Bool("help") || action == nil {
|
|
// the default behavior of "urfave/cli": "nil action" means "show help"
|
|
return cmdHelp().Action(ctx)
|
|
}
|
|
return action(ctx)
|
|
}
|
|
}
|
|
|
|
func NewMainApp(version, versionExtra string) *cli.App {
|
|
path, err := os.Executable()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
executable := filepath.Base(path)
|
|
|
|
var subCmdsStandalone []*cli.Command = make([]*cli.Command, 0, 10)
|
|
var subCmdWithConfig []*cli.Command = make([]*cli.Command, 0, 10)
|
|
|
|
//
|
|
// If the executable is forgejo-cli, provide a Forgejo specific CLI
|
|
// that is NOT compatible with Gitea.
|
|
//
|
|
if executable == "forgejo-cli" {
|
|
subCmdsStandalone = append(subCmdsStandalone, forgejo.CmdActions(context.Background()))
|
|
} else {
|
|
//
|
|
// Otherwise provide a Gitea compatible CLI which includes Forgejo
|
|
// specific additions under the forgejo-cli subcommand. It allows
|
|
// admins to migration from Gitea to Forgejo by replacing the gitea
|
|
// binary and rename it to forgejo if they want.
|
|
//
|
|
subCmdsStandalone = append(subCmdsStandalone, forgejo.CmdForgejo(context.Background()))
|
|
subCmdWithConfig = append(subCmdWithConfig, CmdActions)
|
|
}
|
|
|
|
return innerNewMainApp(version, versionExtra, subCmdsStandalone, subCmdWithConfig)
|
|
}
|
|
|
|
func innerNewMainApp(version, versionExtra string, subCmdsStandaloneArgs, subCmdWithConfigArgs []*cli.Command) *cli.App {
|
|
app := cli.NewApp()
|
|
app.Name = "Gitea"
|
|
app.HelpName = "gitea"
|
|
app.Usage = "A painless self-hosted Git service"
|
|
app.Description = `Gitea program contains "web" and other subcommands. If no subcommand is given, it starts the web server by default. Use "web" subcommand for more web server arguments, use other subcommands for other purposes.`
|
|
app.Version = version + versionExtra
|
|
app.EnableBashCompletion = true
|
|
|
|
// these sub-commands need to use config file
|
|
subCmdWithConfig := []*cli.Command{
|
|
cmdHelp(), // the "help" sub-command was used to show the more information for "work path" and "custom config"
|
|
CmdWeb,
|
|
CmdServ,
|
|
CmdHook,
|
|
CmdKeys,
|
|
CmdDump,
|
|
CmdAdmin,
|
|
CmdMigrate,
|
|
CmdDoctor,
|
|
CmdManager,
|
|
CmdEmbedded,
|
|
CmdMigrateStorage,
|
|
CmdDumpRepository,
|
|
CmdRestoreRepository,
|
|
}
|
|
|
|
subCmdWithConfig = append(subCmdWithConfig, subCmdWithConfigArgs...)
|
|
|
|
// these sub-commands do not need the config file, and they do not depend on any path or environment variable.
|
|
subCmdStandalone := []*cli.Command{
|
|
CmdCert,
|
|
CmdGenerate,
|
|
CmdDocs,
|
|
}
|
|
subCmdStandalone = append(subCmdStandalone, subCmdsStandaloneArgs...)
|
|
|
|
app.DefaultCommand = CmdWeb.Name
|
|
|
|
globalFlags := appGlobalFlags()
|
|
app.Flags = append(app.Flags, cli.VersionFlag)
|
|
app.Flags = append(app.Flags, globalFlags...)
|
|
app.HideHelp = true // use our own help action to show helps (with more information like default config)
|
|
app.Before = PrepareConsoleLoggerLevel(log.INFO)
|
|
for i := range subCmdWithConfig {
|
|
prepareSubcommandWithConfig(subCmdWithConfig[i], globalFlags)
|
|
}
|
|
app.Commands = append(app.Commands, subCmdWithConfig...)
|
|
app.Commands = append(app.Commands, subCmdStandalone...)
|
|
|
|
return app
|
|
}
|
|
|
|
func RunMainApp(app *cli.App, args ...string) error {
|
|
err := app.Run(args)
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
if strings.HasPrefix(err.Error(), "flag provided but not defined:") {
|
|
// the cli package should already have output the error message, so just exit
|
|
cli.OsExiter(1)
|
|
return err
|
|
}
|
|
_, _ = fmt.Fprintf(app.ErrWriter, "Command error: %v\n", err)
|
|
cli.OsExiter(1)
|
|
return err
|
|
}
|