aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/actions.go17
-rw-r--r--cmd/admin.go133
-rw-r--r--cmd/admin_auth_ldap.go62
-rw-r--r--cmd/admin_auth_ldap_test.go2
-rw-r--r--cmd/admin_user.go6
-rw-r--r--cmd/admin_user_change_password.go22
-rw-r--r--cmd/admin_user_create.go24
-rw-r--r--cmd/admin_user_delete.go22
-rw-r--r--cmd/admin_user_generate_access_token.go24
-rw-r--r--cmd/admin_user_list.go6
-rw-r--r--cmd/admin_user_must_change_password.go22
-rw-r--r--cmd/cert.go16
-rw-r--r--cmd/cmd.go15
-rw-r--r--cmd/convert.go4
-rw-r--r--cmd/docs.go9
-rw-r--r--cmd/doctor.go29
-rw-r--r--cmd/dump.go69
-rw-r--r--cmd/dump_repo.go29
-rw-r--r--cmd/embedded.go50
-rw-r--r--cmd/generate.go16
-rw-r--r--cmd/hook.go22
-rw-r--r--cmd/keys.go42
-rw-r--r--cmd/mailer.go2
-rw-r--r--cmd/main.go196
-rw-r--r--cmd/main_test.go115
-rw-r--r--cmd/manager.go40
-rw-r--r--cmd/manager_logging.go155
-rw-r--r--cmd/migrate.go4
-rw-r--r--cmd/migrate_storage.go49
-rw-r--r--cmd/restore_repo.go21
-rw-r--r--cmd/serv.go20
-rw-r--r--cmd/web.go33
32 files changed, 832 insertions, 444 deletions
diff --git a/cmd/actions.go b/cmd/actions.go
index f52a91bd55..052afb9ebc 100644
--- a/cmd/actions.go
+++ b/cmd/actions.go
@@ -9,30 +9,31 @@ import (
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
var (
// CmdActions represents the available actions sub-commands.
- CmdActions = cli.Command{
+ CmdActions = &cli.Command{
Name: "actions",
Usage: "",
Description: "Commands for managing Gitea Actions",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdActionsGenRunnerToken,
},
}
- subcmdActionsGenRunnerToken = cli.Command{
+ subcmdActionsGenRunnerToken = &cli.Command{
Name: "generate-runner-token",
Usage: "Generate a new token for a runner to use to register with the server",
Action: runGenerateActionsRunnerToken,
Aliases: []string{"grt"},
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "scope, s",
- Value: "",
- Usage: "{owner}[/{repo}] - leave empty for a global runner",
+ &cli.StringFlag{
+ Name: "scope",
+ Aliases: []string{"s"},
+ Value: "",
+ Usage: "{owner}[/{repo}] - leave empty for a global runner",
},
},
}
diff --git a/cmd/admin.go b/cmd/admin.go
index f9fb1b6c68..add3d67d74 100644
--- a/cmd/admin.go
+++ b/cmd/admin.go
@@ -26,15 +26,15 @@ import (
"code.gitea.io/gitea/services/auth/source/smtp"
repo_service "code.gitea.io/gitea/services/repository"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
var (
// CmdAdmin represents the available admin sub-command.
- CmdAdmin = cli.Command{
+ CmdAdmin = &cli.Command{
Name: "admin",
Usage: "Command line interface to perform common administrative operations",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdUser,
subcmdRepoSyncReleases,
subcmdRegenerate,
@@ -43,37 +43,37 @@ var (
},
}
- subcmdRepoSyncReleases = cli.Command{
+ subcmdRepoSyncReleases = &cli.Command{
Name: "repo-sync-releases",
Usage: "Synchronize repository releases with tags",
Action: runRepoSyncReleases,
}
- subcmdRegenerate = cli.Command{
+ subcmdRegenerate = &cli.Command{
Name: "regenerate",
Usage: "Regenerate specific files",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
microcmdRegenHooks,
microcmdRegenKeys,
},
}
- microcmdRegenHooks = cli.Command{
+ microcmdRegenHooks = &cli.Command{
Name: "hooks",
Usage: "Regenerate git-hooks",
Action: runRegenerateHooks,
}
- microcmdRegenKeys = cli.Command{
+ microcmdRegenKeys = &cli.Command{
Name: "keys",
Usage: "Regenerate authorized_keys file",
Action: runRegenerateKeys,
}
- subcmdAuth = cli.Command{
+ subcmdAuth = &cli.Command{
Name: "auth",
Usage: "Modify external auth providers",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
microcmdAuthAddOauth,
microcmdAuthUpdateOauth,
cmdAuthAddLdapBindDn,
@@ -87,44 +87,44 @@ var (
},
}
- microcmdAuthList = cli.Command{
+ microcmdAuthList = &cli.Command{
Name: "list",
Usage: "List auth sources",
Action: runListAuth,
Flags: []cli.Flag{
- cli.IntFlag{
+ &cli.IntFlag{
Name: "min-width",
Usage: "Minimal cell width including any padding for the formatted table",
Value: 0,
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "tab-width",
Usage: "width of tab characters in formatted table (equivalent number of spaces)",
Value: 8,
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "padding",
Usage: "padding added to a cell before computing its width",
Value: 1,
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "pad-char",
Usage: `ASCII char used for padding if padchar == '\\t', the Writer will assume that the width of a '\\t' in the formatted output is tabwidth, and cells are left-aligned independent of align_left (for correct-looking results, tabwidth must correspond to the tab width in the viewer displaying the result)`,
Value: "\t",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "vertical-bars",
Usage: "Set to true to print vertical bars between columns",
},
},
}
- idFlag = cli.Int64Flag{
+ idFlag = &cli.Int64Flag{
Name: "id",
Usage: "ID of authentication source",
}
- microcmdAuthDelete = cli.Command{
+ microcmdAuthDelete = &cli.Command{
Name: "delete",
Usage: "Delete specific auth source",
Flags: []cli.Flag{idFlag},
@@ -132,207 +132,208 @@ var (
}
oauthCLIFlags = []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "name",
Value: "",
Usage: "Application Name",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "provider",
Value: "",
Usage: "OAuth2 Provider",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "key",
Value: "",
Usage: "Client ID (Key)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "secret",
Value: "",
Usage: "Client Secret",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "auto-discover-url",
Value: "",
Usage: "OpenID Connect Auto Discovery URL (only required when using OpenID Connect as provider)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "use-custom-urls",
Value: "false",
Usage: "Use custom URLs for GitLab/GitHub OAuth endpoints",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "custom-tenant-id",
Value: "",
Usage: "Use custom Tenant ID for OAuth endpoints",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "custom-auth-url",
Value: "",
Usage: "Use a custom Authorization URL (option for GitLab/GitHub)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "custom-token-url",
Value: "",
Usage: "Use a custom Token URL (option for GitLab/GitHub)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "custom-profile-url",
Value: "",
Usage: "Use a custom Profile URL (option for GitLab/GitHub)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "custom-email-url",
Value: "",
Usage: "Use a custom Email URL (option for GitHub)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "icon-url",
Value: "",
Usage: "Custom icon URL for OAuth2 login source",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-local-2fa",
Usage: "Set to true to skip local 2fa for users authenticated by this source",
},
- cli.StringSliceFlag{
+ &cli.StringSliceFlag{
Name: "scopes",
Value: nil,
Usage: "Scopes to request when to authenticate against this OAuth2 source",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "required-claim-name",
Value: "",
Usage: "Claim name that has to be set to allow users to login with this source",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "required-claim-value",
Value: "",
Usage: "Claim value that has to be set to allow users to login with this source",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "group-claim-name",
Value: "",
Usage: "Claim name providing group names for this source",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "admin-group",
Value: "",
Usage: "Group Claim value for administrator users",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "restricted-group",
Value: "",
Usage: "Group Claim value for restricted users",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "group-team-map",
Value: "",
Usage: "JSON mapping between groups and org teams",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "group-team-map-removal",
Usage: "Activate automatic team membership removal depending on groups",
},
}
- microcmdAuthUpdateOauth = cli.Command{
+ microcmdAuthUpdateOauth = &cli.Command{
Name: "update-oauth",
Usage: "Update existing Oauth authentication source",
Action: runUpdateOauth,
Flags: append(oauthCLIFlags[:1], append([]cli.Flag{idFlag}, oauthCLIFlags[1:]...)...),
}
- microcmdAuthAddOauth = cli.Command{
+ microcmdAuthAddOauth = &cli.Command{
Name: "add-oauth",
Usage: "Add new Oauth authentication source",
Action: runAddOauth,
Flags: oauthCLIFlags,
}
- subcmdSendMail = cli.Command{
+ subcmdSendMail = &cli.Command{
Name: "sendmail",
Usage: "Send a message to all users",
Action: runSendMail,
Flags: []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "title",
Usage: `a title of a message`,
Value: "",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "content",
Usage: "a content of a message",
Value: "",
},
- cli.BoolFlag{
- Name: "force,f",
- Usage: "A flag to bypass a confirmation step",
+ &cli.BoolFlag{
+ Name: "force",
+ Aliases: []string{"f"},
+ Usage: "A flag to bypass a confirmation step",
},
},
}
smtpCLIFlags = []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "name",
Value: "",
Usage: "Application Name",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "auth-type",
Value: "PLAIN",
Usage: "SMTP Authentication Type (PLAIN/LOGIN/CRAM-MD5) default PLAIN",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "host",
Value: "",
Usage: "SMTP Host",
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "port",
Usage: "SMTP Port",
},
- cli.BoolTFlag{
+ &cli.BoolFlag{
Name: "force-smtps",
Usage: "SMTPS is always used on port 465. Set this to force SMTPS on other ports.",
},
- cli.BoolTFlag{
+ &cli.BoolFlag{
Name: "skip-verify",
Usage: "Skip TLS verify.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "helo-hostname",
Value: "",
Usage: "Hostname sent with HELO. Leave blank to send current hostname",
},
- cli.BoolTFlag{
+ &cli.BoolFlag{
Name: "disable-helo",
Usage: "Disable SMTP helo.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "allowed-domains",
Value: "",
Usage: "Leave empty to allow all domains. Separate multiple domains with a comma (',')",
},
- cli.BoolTFlag{
+ &cli.BoolFlag{
Name: "skip-local-2fa",
Usage: "Skip 2FA to log on.",
},
- cli.BoolTFlag{
+ &cli.BoolFlag{
Name: "active",
Usage: "This Authentication Source is Activated.",
},
}
- microcmdAuthAddSMTP = cli.Command{
+ microcmdAuthAddSMTP = &cli.Command{
Name: "add-smtp",
Usage: "Add new SMTP authentication source",
Action: runAddSMTP,
Flags: smtpCLIFlags,
}
- microcmdAuthUpdateSMTP = cli.Command{
+ microcmdAuthUpdateSMTP = &cli.Command{
Name: "update-smtp",
Usage: "Update existing SMTP authentication source",
Action: runUpdateSMTP,
@@ -611,19 +612,19 @@ func parseSMTPConfig(c *cli.Context, conf *smtp.Source) error {
conf.AllowedDomains = c.String("allowed-domains")
}
if c.IsSet("force-smtps") {
- conf.ForceSMTPS = c.BoolT("force-smtps")
+ conf.ForceSMTPS = c.Bool("force-smtps")
}
if c.IsSet("skip-verify") {
- conf.SkipVerify = c.BoolT("skip-verify")
+ conf.SkipVerify = c.Bool("skip-verify")
}
if c.IsSet("helo-hostname") {
conf.HeloHostname = c.String("helo-hostname")
}
if c.IsSet("disable-helo") {
- conf.DisableHelo = c.BoolT("disable-helo")
+ conf.DisableHelo = c.Bool("disable-helo")
}
if c.IsSet("skip-local-2fa") {
- conf.SkipLocalTwoFA = c.BoolT("skip-local-2fa")
+ conf.SkipLocalTwoFA = c.Bool("skip-local-2fa")
}
return nil
}
@@ -647,7 +648,7 @@ func runAddSMTP(c *cli.Context) error {
}
active := true
if c.IsSet("active") {
- active = c.BoolT("active")
+ active = c.Bool("active")
}
var smtpConfig smtp.Source
@@ -696,7 +697,7 @@ func runUpdateSMTP(c *cli.Context) error {
}
if c.IsSet("active") {
- source.IsActive = c.BoolT("active")
+ source.IsActive = c.Bool("active")
}
source.Cfg = smtpConfig
diff --git a/cmd/admin_auth_ldap.go b/cmd/admin_auth_ldap.go
index 91276f221f..cfa1a23235 100644
--- a/cmd/admin_auth_ldap.go
+++ b/cmd/admin_auth_ldap.go
@@ -11,7 +11,7 @@ import (
"code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/services/auth/source/ldap"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
type (
@@ -25,117 +25,117 @@ type (
var (
commonLdapCLIFlags = []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "name",
Usage: "Authentication name.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "not-active",
Usage: "Deactivate the authentication source.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "active",
Usage: "Activate the authentication source.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "security-protocol",
Usage: "Security protocol name.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-tls-verify",
Usage: "Disable TLS verification.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "host",
Usage: "The address where the LDAP server can be reached.",
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "port",
Usage: "The port to use when connecting to the LDAP server.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "user-search-base",
Usage: "The LDAP base at which user accounts will be searched for.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "user-filter",
Usage: "An LDAP filter declaring how to find the user record that is attempting to authenticate.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "admin-filter",
Usage: "An LDAP filter specifying if a user should be given administrator privileges.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "restricted-filter",
Usage: "An LDAP filter specifying if a user should be given restricted status.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "allow-deactivate-all",
Usage: "Allow empty search results to deactivate all users.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "username-attribute",
Usage: "The attribute of the user’s LDAP record containing the user name.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "firstname-attribute",
Usage: "The attribute of the user’s LDAP record containing the user’s first name.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "surname-attribute",
Usage: "The attribute of the user’s LDAP record containing the user’s surname.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "email-attribute",
Usage: "The attribute of the user’s LDAP record containing the user’s email address.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "public-ssh-key-attribute",
Usage: "The attribute of the user’s LDAP record containing the user’s public ssh key.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-local-2fa",
Usage: "Set to true to skip local 2fa for users authenticated by this source",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "avatar-attribute",
Usage: "The attribute of the user’s LDAP record containing the user’s avatar.",
},
}
ldapBindDnCLIFlags = append(commonLdapCLIFlags,
- cli.StringFlag{
+ &cli.StringFlag{
Name: "bind-dn",
Usage: "The DN to bind to the LDAP server with when searching for the user.",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "bind-password",
Usage: "The password for the Bind DN, if any.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "attributes-in-bind",
Usage: "Fetch attributes in bind DN context.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "synchronize-users",
Usage: "Enable user synchronization.",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "disable-synchronize-users",
Usage: "Disable user synchronization.",
},
- cli.UintFlag{
+ &cli.UintFlag{
Name: "page-size",
Usage: "Search page size.",
})
ldapSimpleAuthCLIFlags = append(commonLdapCLIFlags,
- cli.StringFlag{
+ &cli.StringFlag{
Name: "user-dn",
Usage: "The user’s DN.",
})
- cmdAuthAddLdapBindDn = cli.Command{
+ cmdAuthAddLdapBindDn = &cli.Command{
Name: "add-ldap",
Usage: "Add new LDAP (via Bind DN) authentication source",
Action: func(c *cli.Context) error {
@@ -144,7 +144,7 @@ var (
Flags: ldapBindDnCLIFlags,
}
- cmdAuthUpdateLdapBindDn = cli.Command{
+ cmdAuthUpdateLdapBindDn = &cli.Command{
Name: "update-ldap",
Usage: "Update existing LDAP (via Bind DN) authentication source",
Action: func(c *cli.Context) error {
@@ -153,7 +153,7 @@ var (
Flags: append([]cli.Flag{idFlag}, ldapBindDnCLIFlags...),
}
- cmdAuthAddLdapSimpleAuth = cli.Command{
+ cmdAuthAddLdapSimpleAuth = &cli.Command{
Name: "add-ldap-simple",
Usage: "Add new LDAP (simple auth) authentication source",
Action: func(c *cli.Context) error {
@@ -162,7 +162,7 @@ var (
Flags: ldapSimpleAuthCLIFlags,
}
- cmdAuthUpdateLdapSimpleAuth = cli.Command{
+ cmdAuthUpdateLdapSimpleAuth = &cli.Command{
Name: "update-ldap-simple",
Usage: "Update existing LDAP (simple auth) authentication source",
Action: func(c *cli.Context) error {
diff --git a/cmd/admin_auth_ldap_test.go b/cmd/admin_auth_ldap_test.go
index 65f53aaf4e..210a6463c3 100644
--- a/cmd/admin_auth_ldap_test.go
+++ b/cmd/admin_auth_ldap_test.go
@@ -11,7 +11,7 @@ import (
"code.gitea.io/gitea/services/auth/source/ldap"
"github.com/stretchr/testify/assert"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
func TestAddLdapBindDn(t *testing.T) {
diff --git a/cmd/admin_user.go b/cmd/admin_user.go
index a442b8fe9c..967a6ed88a 100644
--- a/cmd/admin_user.go
+++ b/cmd/admin_user.go
@@ -4,13 +4,13 @@
package cmd
import (
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var subcmdUser = cli.Command{
+var subcmdUser = &cli.Command{
Name: "user",
Usage: "Modify users",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
microcmdUserCreate,
microcmdUserList,
microcmdUserChangePassword,
diff --git a/cmd/admin_user_change_password.go b/cmd/admin_user_change_password.go
index 7866bde912..eebbfb3b67 100644
--- a/cmd/admin_user_change_password.go
+++ b/cmd/admin_user_change_password.go
@@ -12,23 +12,25 @@ import (
pwd "code.gitea.io/gitea/modules/auth/password"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserChangePassword = cli.Command{
+var microcmdUserChangePassword = &cli.Command{
Name: "change-password",
Usage: "Change a user's password",
Action: runChangePassword,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "username,u",
- Value: "",
- Usage: "The user to change password for",
+ &cli.StringFlag{
+ Name: "username",
+ Aliases: []string{"u"},
+ Value: "",
+ Usage: "The user to change password for",
},
- cli.StringFlag{
- Name: "password,p",
- Value: "",
- Usage: "New password to set for user",
+ &cli.StringFlag{
+ Name: "password",
+ Aliases: []string{"p"},
+ Value: "",
+ Usage: "New password to set for user",
},
},
}
diff --git a/cmd/admin_user_create.go b/cmd/admin_user_create.go
index 09eaad54be..260d729544 100644
--- a/cmd/admin_user_create.go
+++ b/cmd/admin_user_create.go
@@ -14,52 +14,52 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserCreate = cli.Command{
+var microcmdUserCreate = &cli.Command{
Name: "create",
Usage: "Create a new user in database",
Action: runCreateUser,
Flags: []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "name",
Usage: "Username. DEPRECATED: use username instead",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "username",
Usage: "Username",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "password",
Usage: "User password",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "email",
Usage: "User email address",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "admin",
Usage: "User is an admin",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "random-password",
Usage: "Generate a random password for the user",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "must-change-password",
Usage: "Set this option to false to prevent forcing the user to change their password after initial login, (Default: true)",
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "random-password-length",
Usage: "Length of the random password to be generated",
Value: 12,
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "access-token",
Usage: "Generate access token for the user",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "restricted",
Usage: "Make a restricted user account",
},
diff --git a/cmd/admin_user_delete.go b/cmd/admin_user_delete.go
index 30d6d11576..1cbc6f7527 100644
--- a/cmd/admin_user_delete.go
+++ b/cmd/admin_user_delete.go
@@ -11,26 +11,28 @@ import (
"code.gitea.io/gitea/modules/storage"
user_service "code.gitea.io/gitea/services/user"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserDelete = cli.Command{
+var microcmdUserDelete = &cli.Command{
Name: "delete",
Usage: "Delete specific user by id, name or email",
Flags: []cli.Flag{
- cli.Int64Flag{
+ &cli.Int64Flag{
Name: "id",
Usage: "ID of user of the user to delete",
},
- cli.StringFlag{
- Name: "username,u",
- Usage: "Username of the user to delete",
+ &cli.StringFlag{
+ Name: "username",
+ Aliases: []string{"u"},
+ Usage: "Username of the user to delete",
},
- cli.StringFlag{
- Name: "email,e",
- Usage: "Email of the user to delete",
+ &cli.StringFlag{
+ Name: "email",
+ Aliases: []string{"e"},
+ Usage: "Email of the user to delete",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "purge",
Usage: "Purge user, all their repositories, organizations and comments",
},
diff --git a/cmd/admin_user_generate_access_token.go b/cmd/admin_user_generate_access_token.go
index 822bc5c2bc..9971c2ec91 100644
--- a/cmd/admin_user_generate_access_token.go
+++ b/cmd/admin_user_generate_access_token.go
@@ -9,27 +9,29 @@ import (
auth_model "code.gitea.io/gitea/models/auth"
user_model "code.gitea.io/gitea/models/user"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserGenerateAccessToken = cli.Command{
+var microcmdUserGenerateAccessToken = &cli.Command{
Name: "generate-access-token",
Usage: "Generate an access token for a specific user",
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "username,u",
- Usage: "Username",
+ &cli.StringFlag{
+ Name: "username",
+ Aliases: []string{"u"},
+ Usage: "Username",
},
- cli.StringFlag{
- Name: "token-name,t",
- Usage: "Token name",
- Value: "gitea-admin",
+ &cli.StringFlag{
+ Name: "token-name",
+ Aliases: []string{"t"},
+ Usage: "Token name",
+ Value: "gitea-admin",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "raw",
Usage: "Display only the token value",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "scopes",
Value: "",
Usage: "Comma separated list of scopes to apply to access token",
diff --git a/cmd/admin_user_list.go b/cmd/admin_user_list.go
index 85490331ed..9db9b5e56f 100644
--- a/cmd/admin_user_list.go
+++ b/cmd/admin_user_list.go
@@ -10,15 +10,15 @@ import (
user_model "code.gitea.io/gitea/models/user"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserList = cli.Command{
+var microcmdUserList = &cli.Command{
Name: "list",
Usage: "List users",
Action: runListUsers,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "admin",
Usage: "List only admin users",
},
diff --git a/cmd/admin_user_must_change_password.go b/cmd/admin_user_must_change_password.go
index eb13fbcae5..2794414259 100644
--- a/cmd/admin_user_must_change_password.go
+++ b/cmd/admin_user_must_change_password.go
@@ -9,23 +9,25 @@ import (
user_model "code.gitea.io/gitea/models/user"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
-var microcmdUserMustChangePassword = cli.Command{
+var microcmdUserMustChangePassword = &cli.Command{
Name: "must-change-password",
Usage: "Set the must change password flag for the provided users or all users",
Action: runMustChangePassword,
Flags: []cli.Flag{
- cli.BoolFlag{
- Name: "all,A",
- Usage: "All users must change password, except those explicitly excluded with --exclude",
+ &cli.BoolFlag{
+ Name: "all",
+ Aliases: []string{"A"},
+ Usage: "All users must change password, except those explicitly excluded with --exclude",
},
- cli.StringSliceFlag{
- Name: "exclude,e",
- Usage: "Do not change the must-change-password flag for these users",
+ &cli.StringSliceFlag{
+ Name: "exclude",
+ Aliases: []string{"e"},
+ Usage: "Do not change the must-change-password flag for these users",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "unset",
Usage: "Instead of setting the must-change-password flag, unset it",
},
@@ -48,7 +50,7 @@ func runMustChangePassword(c *cli.Context) error {
return err
}
- n, err := user_model.SetMustChangePassword(ctx, all, mustChangePassword, c.Args(), exclude)
+ n, err := user_model.SetMustChangePassword(ctx, all, mustChangePassword, c.Args().Slice(), exclude)
if err != nil {
return err
}
diff --git a/cmd/cert.go b/cmd/cert.go
index 897c10c899..9ae5ed06ce 100644
--- a/cmd/cert.go
+++ b/cmd/cert.go
@@ -20,43 +20,43 @@ import (
"strings"
"time"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdCert represents the available cert sub-command.
-var CmdCert = cli.Command{
+var CmdCert = &cli.Command{
Name: "cert",
Usage: "Generate self-signed certificate",
Description: `Generate a self-signed X.509 certificate for a TLS server.
Outputs to 'cert.pem' and 'key.pem' and will overwrite existing files.`,
Action: runCert,
Flags: []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "host",
Value: "",
Usage: "Comma-separated hostnames and IPs to generate a certificate for",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "ecdsa-curve",
Value: "",
Usage: "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521",
},
- cli.IntFlag{
+ &cli.IntFlag{
Name: "rsa-bits",
Value: 2048,
Usage: "Size of RSA key to generate. Ignored if --ecdsa-curve is set",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "start-date",
Value: "",
Usage: "Creation date formatted as Jan 1 15:04:05 2011",
},
- cli.DurationFlag{
+ &cli.DurationFlag{
Name: "duration",
Value: 365 * 24 * time.Hour,
Usage: "Duration that certificate is valid for",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "ca",
Usage: "whether this cert should be its own Certificate Authority",
},
diff --git a/cmd/cmd.go b/cmd/cmd.go
index 4ed636a9b4..423dce2674 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -20,7 +20,7 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// argsSet checks that all the required arguments are set. args is a list of
@@ -109,15 +109,24 @@ func setupConsoleLogger(level log.Level, colorize bool, out io.Writer) {
log.GetManager().GetLogger(log.DEFAULT).ReplaceAllWriters(writer)
}
+func globalBool(c *cli.Context, name string) bool {
+ for _, ctx := range c.Lineage() {
+ if ctx.Bool(name) {
+ return true
+ }
+ }
+ return false
+}
+
// PrepareConsoleLoggerLevel by default, use INFO level for console logger, but some sub-commands (for git/ssh protocol) shouldn't output any log to stdout.
// Any log appears in git stdout pipe will break the git protocol, eg: client can't push and hangs forever.
func PrepareConsoleLoggerLevel(defaultLevel log.Level) func(*cli.Context) error {
return func(c *cli.Context) error {
level := defaultLevel
- if c.Bool("quiet") || c.GlobalBoolT("quiet") {
+ if globalBool(c, "quiet") {
level = log.FATAL
}
- if c.Bool("debug") || c.GlobalBool("debug") || c.Bool("verbose") || c.GlobalBool("verbose") {
+ if globalBool(c, "debug") || globalBool(c, "verbose") {
level = log.TRACE
}
log.SetConsoleLogger(log.DEFAULT, "console-default", level)
diff --git a/cmd/convert.go b/cmd/convert.go
index 8c7746fdf2..37a260cbd8 100644
--- a/cmd/convert.go
+++ b/cmd/convert.go
@@ -10,11 +10,11 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdConvert represents the available convert sub-command.
-var CmdConvert = cli.Command{
+var CmdConvert = &cli.Command{
Name: "convert",
Usage: "Convert the database",
Description: "A command to convert an existing MySQL database from utf8 to utf8mb4 or MSSQL database from varchar to nvarchar",
diff --git a/cmd/docs.go b/cmd/docs.go
index 901d0abd1c..605d02e3ef 100644
--- a/cmd/docs.go
+++ b/cmd/docs.go
@@ -8,11 +8,11 @@ import (
"os"
"strings"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdDocs represents the available docs sub-command.
-var CmdDocs = cli.Command{
+var CmdDocs = &cli.Command{
Name: "docs",
Usage: "Output CLI documentation",
Description: "A command to output Gitea's CLI documentation, optionally to a file.",
@@ -23,8 +23,9 @@ var CmdDocs = cli.Command{
Usage: "Output man pages instead",
},
&cli.StringFlag{
- Name: "output, o",
- Usage: "Path to output to instead of stdout (will overwrite if exists)",
+ Name: "output",
+ Aliases: []string{"o"},
+ Usage: "Path to output to instead of stdout (will overwrite if exists)",
},
},
}
diff --git a/cmd/doctor.go b/cmd/doctor.go
index cd5f125e20..f8866c7b97 100644
--- a/cmd/doctor.go
+++ b/cmd/doctor.go
@@ -18,57 +18,58 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
"xorm.io/xorm"
)
// CmdDoctor represents the available doctor sub-command.
-var CmdDoctor = cli.Command{
+var CmdDoctor = &cli.Command{
Name: "doctor",
Usage: "Diagnose and optionally fix problems",
Description: "A command to diagnose problems with the current Gitea instance according to the given configuration. Some problems can optionally be fixed by modifying the database or data storage.",
Action: runDoctor,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "list",
Usage: "List the available checks",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "default",
Usage: "Run the default checks (if neither --run or --all is set, this is the default behaviour)",
},
- cli.StringSliceFlag{
+ &cli.StringSliceFlag{
Name: "run",
Usage: "Run the provided checks - (if --default is set, the default checks will also run)",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "all",
Usage: "Run all the available checks",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "fix",
Usage: "Automatically fix what we can",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "log-file",
Usage: `Name of the log file (default: "doctor.log"). Set to "-" to output to stdout, set to "" to disable`,
},
- cli.BoolFlag{
- Name: "color, H",
- Usage: "Use color for outputted information",
+ &cli.BoolFlag{
+ Name: "color",
+ Aliases: []string{"H"},
+ Usage: "Use color for outputted information",
},
},
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
cmdRecreateTable,
},
}
-var cmdRecreateTable = cli.Command{
+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{
+ &cli.BoolFlag{
Name: "debug",
Usage: "Print SQL commands sent",
},
diff --git a/cmd/dump.go b/cmd/dump.go
index b1aed8aef4..9b5259b86f 100644
--- a/cmd/dump.go
+++ b/cmd/dump.go
@@ -22,7 +22,7 @@ import (
"gitea.com/go-chi/session"
"github.com/mholt/archiver/v3"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
func addReader(w archiver.Writer, r io.ReadCloser, info os.FileInfo, customName string, verbose bool) error {
@@ -96,64 +96,71 @@ var outputTypeEnum = &outputType{
}
// CmdDump represents the available dump sub-command.
-var CmdDump = cli.Command{
+var CmdDump = &cli.Command{
Name: "dump",
Usage: "Dump Gitea files and database",
Description: `Dump compresses all related files and database into zip file.
It can be used for backup and capture Gitea server image to send to maintainer`,
Action: runDump,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "file, f",
- Value: fmt.Sprintf("gitea-dump-%d.zip", time.Now().Unix()),
- Usage: "Name of the dump file which will be created. Supply '-' for stdout. See type for available types.",
+ &cli.StringFlag{
+ Name: "file",
+ Aliases: []string{"f"},
+ Value: fmt.Sprintf("gitea-dump-%d.zip", time.Now().Unix()),
+ Usage: "Name of the dump file which will be created. Supply '-' for stdout. See type for available types.",
},
- cli.BoolFlag{
- Name: "verbose, V",
- Usage: "Show process details",
+ &cli.BoolFlag{
+ Name: "verbose",
+ Aliases: []string{"V"},
+ Usage: "Show process details",
},
- cli.BoolFlag{
- Name: "quiet, q",
- Usage: "Only display warnings and errors",
+ &cli.BoolFlag{
+ Name: "quiet",
+ Aliases: []string{"q"},
+ Usage: "Only display warnings and errors",
},
- cli.StringFlag{
- Name: "tempdir, t",
- Value: os.TempDir(),
- Usage: "Temporary dir path",
+ &cli.StringFlag{
+ Name: "tempdir",
+ Aliases: []string{"t"},
+ Value: os.TempDir(),
+ Usage: "Temporary dir path",
},
- cli.StringFlag{
- Name: "database, d",
- Usage: "Specify the database SQL syntax",
+ &cli.StringFlag{
+ Name: "database",
+ Aliases: []string{"d"},
+ Usage: "Specify the database SQL syntax",
},
- cli.BoolFlag{
- Name: "skip-repository, R",
- Usage: "Skip the repository dumping",
+ &cli.BoolFlag{
+ Name: "skip-repository",
+ Aliases: []string{"R"},
+ Usage: "Skip the repository dumping",
},
- cli.BoolFlag{
- Name: "skip-log, L",
- Usage: "Skip the log dumping",
+ &cli.BoolFlag{
+ Name: "skip-log",
+ Aliases: []string{"L"},
+ Usage: "Skip the log dumping",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-custom-dir",
Usage: "Skip custom directory",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-lfs-data",
Usage: "Skip LFS data",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-attachment-data",
Usage: "Skip attachment data",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-package-data",
Usage: "Skip package data",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "skip-index",
Usage: "Skip bleve index data",
},
- cli.GenericFlag{
+ &cli.GenericFlag{
Name: "type",
Value: outputTypeEnum,
Usage: fmt.Sprintf("Dump output format: %s", outputTypeEnum.Join()),
diff --git a/cmd/dump_repo.go b/cmd/dump_repo.go
index 0d3970466c..3a24cf6c5f 100644
--- a/cmd/dump_repo.go
+++ b/cmd/dump_repo.go
@@ -19,57 +19,58 @@ import (
"code.gitea.io/gitea/services/convert"
"code.gitea.io/gitea/services/migrations"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdDumpRepository represents the available dump repository sub-command.
-var CmdDumpRepository = cli.Command{
+var CmdDumpRepository = &cli.Command{
Name: "dump-repo",
Usage: "Dump the repository from git/github/gitea/gitlab",
Description: "This is a command for dumping the repository data.",
Action: runDumpRepository,
Flags: []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "git_service",
Value: "",
Usage: "Git service, git, github, gitea, gitlab. If clone_addr could be recognized, this could be ignored.",
},
- cli.StringFlag{
- Name: "repo_dir, r",
- Value: "./data",
- Usage: "Repository dir path to store the data",
+ &cli.StringFlag{
+ Name: "repo_dir",
+ Aliases: []string{"r"},
+ Value: "./data",
+ Usage: "Repository dir path to store the data",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "clone_addr",
Value: "",
Usage: "The URL will be clone, currently could be a git/github/gitea/gitlab http/https URL",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "auth_username",
Value: "",
Usage: "The username to visit the clone_addr",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "auth_password",
Value: "",
Usage: "The password to visit the clone_addr",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "auth_token",
Value: "",
Usage: "The personal token to visit the clone_addr",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "owner_name",
Value: "",
Usage: "The data will be stored on a directory with owner name if not empty",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "repo_name",
Value: "",
Usage: "The data will be stored on a directory with repository name if not empty",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "units",
Value: "",
Usage: `Which items will be migrated, one or more units should be separated as comma.
diff --git a/cmd/embedded.go b/cmd/embedded.go
index 105acee26c..71d483d11c 100644
--- a/cmd/embedded.go
+++ b/cmd/embedded.go
@@ -19,70 +19,74 @@ import (
"code.gitea.io/gitea/modules/util"
"github.com/gobwas/glob"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdEmbedded represents the available extract sub-command.
var (
- CmdEmbedded = cli.Command{
+ CmdEmbedded = &cli.Command{
Name: "embedded",
Usage: "Extract embedded resources",
Description: "A command for extracting embedded resources, like templates and images",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdList,
subcmdView,
subcmdExtract,
},
}
- subcmdList = cli.Command{
+ subcmdList = &cli.Command{
Name: "list",
Usage: "List files matching the given pattern",
Action: runList,
Flags: []cli.Flag{
- cli.BoolFlag{
- Name: "include-vendored,vendor",
- Usage: "Include files under public/vendor as well",
+ &cli.BoolFlag{
+ Name: "include-vendored",
+ Aliases: []string{"vendor"},
+ Usage: "Include files under public/vendor as well",
},
},
}
- subcmdView = cli.Command{
+ subcmdView = &cli.Command{
Name: "view",
Usage: "View a file matching the given pattern",
Action: runView,
Flags: []cli.Flag{
- cli.BoolFlag{
- Name: "include-vendored,vendor",
- Usage: "Include files under public/vendor as well",
+ &cli.BoolFlag{
+ Name: "include-vendored",
+ Aliases: []string{"vendor"},
+ Usage: "Include files under public/vendor as well",
},
},
}
- subcmdExtract = cli.Command{
+ subcmdExtract = &cli.Command{
Name: "extract",
Usage: "Extract resources",
Action: runExtract,
Flags: []cli.Flag{
- cli.BoolFlag{
- Name: "include-vendored,vendor",
- Usage: "Include files under public/vendor as well",
+ &cli.BoolFlag{
+ Name: "include-vendored",
+ Aliases: []string{"vendor"},
+ Usage: "Include files under public/vendor as well",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "overwrite",
Usage: "Overwrite files if they already exist",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "rename",
Usage: "Rename files as {name}.bak if they already exist (overwrites previous .bak)",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "custom",
Usage: "Extract to the 'custom' directory as per app.ini",
},
- cli.StringFlag{
- Name: "destination,dest-dir",
- Usage: "Extract to the specified directory",
+ &cli.StringFlag{
+ Name: "destination",
+ Aliases: []string{"dest-dir"},
+ Usage: "Extract to the specified directory",
},
},
}
@@ -99,7 +103,7 @@ type assetFile struct {
func initEmbeddedExtractor(c *cli.Context) error {
setupConsoleLogger(log.ERROR, log.CanColorStderr, os.Stderr)
- patterns, err := compileCollectPatterns(c.Args())
+ patterns, err := compileCollectPatterns(c.Args().Slice())
if err != nil {
return err
}
@@ -175,7 +179,7 @@ func runExtractDo(c *cli.Context) error {
return err
}
- if len(c.Args()) == 0 {
+ if c.NArg() == 0 {
return fmt.Errorf("a list of pattern of files to extract is mandatory (e.g. '**' for all)")
}
diff --git a/cmd/generate.go b/cmd/generate.go
index f72ee16390..2cff24458d 100644
--- a/cmd/generate.go
+++ b/cmd/generate.go
@@ -11,43 +11,43 @@ import (
"code.gitea.io/gitea/modules/generate"
"github.com/mattn/go-isatty"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
var (
// CmdGenerate represents the available generate sub-command.
- CmdGenerate = cli.Command{
+ CmdGenerate = &cli.Command{
Name: "generate",
Usage: "Command line interface for running generators",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdSecret,
},
}
- subcmdSecret = cli.Command{
+ subcmdSecret = &cli.Command{
Name: "secret",
Usage: "Generate a secret token",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
microcmdGenerateInternalToken,
microcmdGenerateLfsJwtSecret,
microcmdGenerateSecretKey,
},
}
- microcmdGenerateInternalToken = cli.Command{
+ microcmdGenerateInternalToken = &cli.Command{
Name: "INTERNAL_TOKEN",
Usage: "Generate a new INTERNAL_TOKEN",
Action: runGenerateInternalToken,
}
- microcmdGenerateLfsJwtSecret = cli.Command{
+ microcmdGenerateLfsJwtSecret = &cli.Command{
Name: "JWT_SECRET",
Aliases: []string{"LFS_JWT_SECRET"},
Usage: "Generate a new JWT_SECRET",
Action: runGenerateLfsJwtSecret,
}
- microcmdGenerateSecretKey = cli.Command{
+ microcmdGenerateSecretKey = &cli.Command{
Name: "SECRET_KEY",
Usage: "Generate a new SECRET_KEY",
Action: runGenerateSecretKey,
diff --git a/cmd/hook.go b/cmd/hook.go
index ed6efc19ea..f38fd8831b 100644
--- a/cmd/hook.go
+++ b/cmd/hook.go
@@ -20,7 +20,7 @@ import (
repo_module "code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
const (
@@ -29,12 +29,12 @@ const (
var (
// CmdHook represents the available hooks sub-command.
- CmdHook = cli.Command{
+ CmdHook = &cli.Command{
Name: "hook",
Usage: "Delegate commands to corresponding Git hooks",
Description: "This should only be called by Git",
Before: PrepareConsoleLoggerLevel(log.FATAL),
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdHookPreReceive,
subcmdHookUpdate,
subcmdHookPostReceive,
@@ -42,47 +42,47 @@ var (
},
}
- subcmdHookPreReceive = cli.Command{
+ subcmdHookPreReceive = &cli.Command{
Name: "pre-receive",
Usage: "Delegate pre-receive Git hook",
Description: "This command should only be called by Git",
Action: runHookPreReceive,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
}
- subcmdHookUpdate = cli.Command{
+ subcmdHookUpdate = &cli.Command{
Name: "update",
Usage: "Delegate update Git hook",
Description: "This command should only be called by Git",
Action: runHookUpdate,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
}
- subcmdHookPostReceive = cli.Command{
+ subcmdHookPostReceive = &cli.Command{
Name: "post-receive",
Usage: "Delegate post-receive Git hook",
Description: "This command should only be called by Git",
Action: runHookPostReceive,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
}
// Note: new hook since git 2.29
- subcmdHookProcReceive = cli.Command{
+ subcmdHookProcReceive = &cli.Command{
Name: "proc-receive",
Usage: "Delegate proc-receive Git hook",
Description: "This command should only be called by Git",
Action: runHookProcReceive,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
diff --git a/cmd/keys.go b/cmd/keys.go
index 8aeee37527..b846782529 100644
--- a/cmd/keys.go
+++ b/cmd/keys.go
@@ -11,35 +11,39 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/private"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdKeys represents the available keys sub-command
-var CmdKeys = cli.Command{
+var CmdKeys = &cli.Command{
Name: "keys",
Usage: "This command queries the Gitea database to get the authorized command for a given ssh key fingerprint",
Before: PrepareConsoleLoggerLevel(log.FATAL),
Action: runKeys,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "expected, e",
- Value: "git",
- Usage: "Expected user for whom provide key commands",
+ &cli.StringFlag{
+ Name: "expected",
+ Aliases: []string{"e"},
+ Value: "git",
+ Usage: "Expected user for whom provide key commands",
},
- cli.StringFlag{
- Name: "username, u",
- Value: "",
- Usage: "Username trying to log in by SSH",
+ &cli.StringFlag{
+ Name: "username",
+ Aliases: []string{"u"},
+ Value: "",
+ Usage: "Username trying to log in by SSH",
},
- cli.StringFlag{
- Name: "type, t",
- Value: "",
- Usage: "Type of the SSH key provided to the SSH Server (requires content to be provided too)",
+ &cli.StringFlag{
+ Name: "type",
+ Aliases: []string{"t"},
+ Value: "",
+ Usage: "Type of the SSH key provided to the SSH Server (requires content to be provided too)",
},
- cli.StringFlag{
- Name: "content, k",
- Value: "",
- Usage: "Base64 encoded content of the SSH key provided to the SSH Server (requires type to be provided too)",
+ &cli.StringFlag{
+ Name: "content",
+ Aliases: []string{"k"},
+ Value: "",
+ Usage: "Base64 encoded content of the SSH key provided to the SSH Server (requires type to be provided too)",
},
},
}
@@ -73,6 +77,6 @@ func runKeys(c *cli.Context) error {
if extra.Error != nil {
return extra.Error
}
- fmt.Println(strings.TrimSpace(authorizedString))
+ _, _ = fmt.Fprintln(c.App.Writer, strings.TrimSpace(authorizedString))
return nil
}
diff --git a/cmd/mailer.go b/cmd/mailer.go
index eaa5a1afe1..646330e85a 100644
--- a/cmd/mailer.go
+++ b/cmd/mailer.go
@@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
func runSendMail(c *cli.Context) error {
diff --git a/cmd/main.go b/cmd/main.go
new file mode 100644
index 0000000000..b4a38a4523
--- /dev/null
+++ b/cmd/main.go
@@ -0,0 +1,196 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package cmd
+
+import (
+ "fmt"
+ "os"
+ "reflect"
+ "strings"
+
+ "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
+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) {
+ args := c.Args()
+ if args.Present() {
+ err = cli.ShowCommandHelp(c, args.First())
+ } 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
+}
+
+var helpFlag = cli.HelpFlag
+
+func init() {
+ // cli.HelpFlag = nil TODO: after https://github.com/urfave/cli/issues/1794 we can use this
+}
+
+func appGlobalFlags() []cli.Flag {
+ return []cli.Flag{
+ // make the builtin flags at the top
+ helpFlag,
+ cli.VersionFlag,
+
+ // 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 Gitea's working path (defaults to the Gitea's binary directory)",
+ },
+ }
+}
+
+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
+ ctxLineage := ctx.Lineage()
+ for i := len(ctxLineage) - 1; i >= 0; i-- {
+ curCtx := ctxLineage[i]
+ 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 reflectGet(v any, fieldName string) any {
+ e := reflect.ValueOf(v).Elem()
+ return e.FieldByName(fieldName).Interface()
+}
+
+// https://cli.urfave.org/migrate-v1-to-v2/#flag-aliases-are-done-differently
+// Sadly v2 doesn't warn you if a comma is in the name. (https://github.com/urfave/cli/issues/1103)
+func checkCommandFlags(c any) bool {
+ var cmds []*cli.Command
+ if app, ok := c.(*cli.App); ok {
+ cmds = app.Commands
+ } else {
+ cmds = c.(*cli.Command).Subcommands
+ }
+ ok := true
+ for _, cmd := range cmds {
+ for _, flag := range cmd.Flags {
+ flagName := reflectGet(flag, "Name").(string)
+ if strings.Contains(flagName, ",") {
+ ok = false
+ log.Error("cli.Flag can't have comma in its Name: %q, use Aliases instead", flagName)
+ }
+ }
+ if !checkCommandFlags(cmd) {
+ ok = false
+ }
+ }
+ return ok
+}
+
+func NewMainApp() *cli.App {
+ app := cli.NewApp()
+ app.EnableBashCompletion = true
+
+ // these sub-commands need to use config file
+ subCmdWithConfig := []*cli.Command{
+ CmdWeb,
+ CmdServ,
+ CmdHook,
+ CmdDump,
+ CmdAdmin,
+ CmdMigrate,
+ CmdKeys,
+ CmdConvert,
+ CmdDoctor,
+ CmdManager,
+ CmdEmbedded,
+ CmdMigrateStorage,
+ CmdDumpRepository,
+ CmdRestoreRepository,
+ CmdActions,
+ cmdHelp(), // the "help" sub-command was used to show the more information for "work path" and "custom config"
+ }
+
+ // 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,
+ }
+
+ app.DefaultCommand = CmdWeb.Name
+
+ globalFlags := appGlobalFlags()
+ 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...)
+
+ if !checkCommandFlags(app) {
+ panic("some flags are incorrect") // this is a runtime check to help developers
+ }
+ return app
+}
diff --git a/cmd/main_test.go b/cmd/main_test.go
index 6e20be6945..e9204d09cc 100644
--- a/cmd/main_test.go
+++ b/cmd/main_test.go
@@ -4,9 +4,17 @@
package cmd
import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
"testing"
"code.gitea.io/gitea/models/unittest"
+ "code.gitea.io/gitea/modules/setting"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/urfave/cli/v2"
)
func TestMain(m *testing.M) {
@@ -14,3 +22,110 @@ func TestMain(m *testing.M) {
GiteaRootPath: "..",
})
}
+
+func makePathOutput(workPath, customPath, customConf string) string {
+ return fmt.Sprintf("WorkPath=%s\nCustomPath=%s\nCustomConf=%s", workPath, customPath, customConf)
+}
+
+func newTestApp() *cli.App {
+ app := NewMainApp()
+ testCmd := &cli.Command{
+ Name: "test-cmd",
+ Action: func(ctx *cli.Context) error {
+ _, _ = fmt.Fprint(app.Writer, makePathOutput(setting.AppWorkPath, setting.CustomPath, setting.CustomConf))
+ return nil
+ },
+ }
+ prepareSubcommandWithConfig(testCmd, appGlobalFlags())
+ app.Commands = append(app.Commands, testCmd)
+ app.DefaultCommand = testCmd.Name
+ return app
+}
+
+func TestCliCmd(t *testing.T) {
+ defaultWorkPath := filepath.Dir(setting.AppPath)
+ defaultCustomPath := filepath.Join(defaultWorkPath, "custom")
+ defaultCustomConf := filepath.Join(defaultCustomPath, "conf/app.ini")
+
+ cli.CommandHelpTemplate = "(command help template)"
+ cli.AppHelpTemplate = "(app help template)"
+ cli.SubcommandHelpTemplate = "(subcommand help template)"
+
+ cases := []struct {
+ env map[string]string
+ cmd string
+ exp string
+ }{
+ // main command help
+ {
+ cmd: "./gitea help",
+ exp: "DEFAULT CONFIGURATION:",
+ },
+
+ // parse paths
+ {
+ cmd: "./gitea test-cmd",
+ exp: makePathOutput(defaultWorkPath, defaultCustomPath, defaultCustomConf),
+ },
+ {
+ cmd: "./gitea -c /tmp/app.ini test-cmd",
+ exp: makePathOutput(defaultWorkPath, defaultCustomPath, "/tmp/app.ini"),
+ },
+ {
+ cmd: "./gitea test-cmd -c /tmp/app.ini",
+ exp: makePathOutput(defaultWorkPath, defaultCustomPath, "/tmp/app.ini"),
+ },
+ {
+ env: map[string]string{"GITEA_WORK_DIR": "/tmp"},
+ cmd: "./gitea test-cmd",
+ exp: makePathOutput("/tmp", "/tmp/custom", "/tmp/custom/conf/app.ini"),
+ },
+ {
+ env: map[string]string{"GITEA_WORK_DIR": "/tmp"},
+ cmd: "./gitea test-cmd --work-path /tmp/other",
+ exp: makePathOutput("/tmp/other", "/tmp/other/custom", "/tmp/other/custom/conf/app.ini"),
+ },
+ {
+ env: map[string]string{"GITEA_WORK_DIR": "/tmp"},
+ cmd: "./gitea test-cmd --config /tmp/app-other.ini",
+ exp: makePathOutput("/tmp", "/tmp/custom", "/tmp/app-other.ini"),
+ },
+ }
+
+ app := newTestApp()
+ var envBackup []string
+ for _, s := range os.Environ() {
+ if strings.HasPrefix(s, "GITEA_") && strings.Contains(s, "=") {
+ envBackup = append(envBackup, s)
+ }
+ }
+ clearGiteaEnv := func() {
+ for _, s := range os.Environ() {
+ if strings.HasPrefix(s, "GITEA_") {
+ _ = os.Unsetenv(s)
+ }
+ }
+ }
+ defer func() {
+ clearGiteaEnv()
+ for _, s := range envBackup {
+ k, v, _ := strings.Cut(s, "=")
+ _ = os.Setenv(k, v)
+ }
+ }()
+
+ for _, c := range cases {
+ clearGiteaEnv()
+ for k, v := range c.env {
+ _ = os.Setenv(k, v)
+ }
+ args := strings.Split(c.cmd, " ") // for test only, "split" is good enough
+ out := new(strings.Builder)
+ app.Writer = out
+ err := app.Run(args)
+ assert.NoError(t, err, c.cmd)
+ assert.NotEmpty(t, c.exp, c.cmd)
+ outStr := out.String()
+ assert.Contains(t, outStr, c.exp, c.cmd)
+ }
+}
diff --git a/cmd/manager.go b/cmd/manager.go
index 2024d5ebbd..bd2da8edc7 100644
--- a/cmd/manager.go
+++ b/cmd/manager.go
@@ -9,16 +9,16 @@ import (
"code.gitea.io/gitea/modules/private"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
var (
// CmdManager represents the manager command
- CmdManager = cli.Command{
+ CmdManager = &cli.Command{
Name: "manager",
Usage: "Manage the running gitea process",
Description: "This is a command for managing the running gitea process",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
subcmdShutdown,
subcmdRestart,
subcmdReloadTemplates,
@@ -27,80 +27,80 @@ var (
subCmdProcesses,
},
}
- subcmdShutdown = cli.Command{
+ subcmdShutdown = &cli.Command{
Name: "shutdown",
Usage: "Gracefully shutdown the running process",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
Action: runShutdown,
}
- subcmdRestart = cli.Command{
+ subcmdRestart = &cli.Command{
Name: "restart",
Usage: "Gracefully restart the running process - (not implemented for windows servers)",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
Action: runRestart,
}
- subcmdReloadTemplates = cli.Command{
+ subcmdReloadTemplates = &cli.Command{
Name: "reload-templates",
Usage: "Reload template files in the running process",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
Action: runReloadTemplates,
}
- subcmdFlushQueues = cli.Command{
+ subcmdFlushQueues = &cli.Command{
Name: "flush-queues",
Usage: "Flush queues in the running process",
Action: runFlushQueues,
Flags: []cli.Flag{
- cli.DurationFlag{
+ &cli.DurationFlag{
Name: "timeout",
Value: 60 * time.Second,
Usage: "Timeout for the flushing process",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "non-blocking",
Usage: "Set to true to not wait for flush to complete before returning",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
}
- subCmdProcesses = cli.Command{
+ subCmdProcesses = &cli.Command{
Name: "processes",
Usage: "Display running processes within the current process",
Action: runProcesses,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "flat",
Usage: "Show processes as flat table rather than as tree",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "no-system",
Usage: "Do not show system processes",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "stacktraces",
Usage: "Show stacktraces",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "json",
Usage: "Output as json",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "cancel",
Usage: "Process PID to cancel. (Only available for non-system processes.)",
},
diff --git a/cmd/manager_logging.go b/cmd/manager_logging.go
index 70d1beb26d..84c962561e 100644
--- a/cmd/manager_logging.go
+++ b/cmd/manager_logging.go
@@ -10,49 +10,61 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/private"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
var (
defaultLoggingFlags = []cli.Flag{
- cli.StringFlag{
+ &cli.StringFlag{
Name: "logger",
Usage: `Logger name - will default to "default"`,
- }, cli.StringFlag{
+ },
+ &cli.StringFlag{
Name: "writer",
Usage: "Name of the log writer - will default to mode",
- }, cli.StringFlag{
+ },
+ &cli.StringFlag{
Name: "level",
Usage: "Logging level for the new logger",
- }, cli.StringFlag{
- Name: "stacktrace-level, L",
- Usage: "Stacktrace logging level",
- }, cli.StringFlag{
- Name: "flags, F",
- Usage: "Flags for the logger",
- }, cli.StringFlag{
- Name: "expression, e",
- Usage: "Matching expression for the logger",
- }, cli.StringFlag{
- Name: "prefix, p",
- Usage: "Prefix for the logger",
- }, cli.BoolFlag{
+ },
+ &cli.StringFlag{
+ Name: "stacktrace-level",
+ Aliases: []string{"L"},
+ Usage: "Stacktrace logging level",
+ },
+ &cli.StringFlag{
+ Name: "flags",
+ Aliases: []string{"F"},
+ Usage: "Flags for the logger",
+ },
+ &cli.StringFlag{
+ Name: "expression",
+ Aliases: []string{"e"},
+ Usage: "Matching expression for the logger",
+ },
+ &cli.StringFlag{
+ Name: "prefix",
+ Aliases: []string{"p"},
+ Usage: "Prefix for the logger",
+ },
+ &cli.BoolFlag{
Name: "color",
Usage: "Use color in the logs",
- }, cli.BoolFlag{
+ },
+ &cli.BoolFlag{
Name: "debug",
},
}
- subcmdLogging = cli.Command{
+ subcmdLogging = &cli.Command{
Name: "logging",
Usage: "Adjust logging commands",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
{
Name: "pause",
Usage: "Pause logging (Gitea will buffer logs up to a certain point and will drop them after that point)",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
@@ -61,7 +73,7 @@ var (
Name: "resume",
Usage: "Resume logging",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
@@ -70,7 +82,7 @@ var (
Name: "release-and-reopen",
Usage: "Cause Gitea to release and re-open files used for logging",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
@@ -80,9 +92,9 @@ var (
Usage: "Remove a logger",
ArgsUsage: "[name] Name of logger to remove",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
- }, cli.StringFlag{
+ }, &cli.StringFlag{
Name: "logger",
Usage: `Logger name - will default to "default"`,
},
@@ -91,32 +103,45 @@ var (
}, {
Name: "add",
Usage: "Add a logger",
- Subcommands: []cli.Command{
+ Subcommands: []*cli.Command{
{
Name: "file",
Usage: "Add a file logger",
Flags: append(defaultLoggingFlags, []cli.Flag{
- cli.StringFlag{
- Name: "filename, f",
- Usage: "Filename for the logger - this must be set.",
- }, cli.BoolTFlag{
- Name: "rotate, r",
- Usage: "Rotate logs",
- }, cli.Int64Flag{
- Name: "max-size, s",
- Usage: "Maximum size in bytes before rotation",
- }, cli.BoolTFlag{
- Name: "daily, d",
- Usage: "Rotate logs daily",
- }, cli.IntFlag{
- Name: "max-days, D",
- Usage: "Maximum number of daily logs to keep",
- }, cli.BoolTFlag{
- Name: "compress, z",
- Usage: "Compress rotated logs",
- }, cli.IntFlag{
- Name: "compression-level, Z",
- Usage: "Compression level to use",
+ &cli.StringFlag{
+ Name: "filename",
+ Aliases: []string{"f"},
+ Usage: "Filename for the logger - this must be set.",
+ },
+ &cli.BoolFlag{
+ Name: "rotate",
+ Aliases: []string{"r"},
+ Usage: "Rotate logs",
+ },
+ &cli.Int64Flag{
+ Name: "max-size",
+ Aliases: []string{"s"},
+ Usage: "Maximum size in bytes before rotation",
+ },
+ &cli.BoolFlag{
+ Name: "daily",
+ Aliases: []string{"d"},
+ Usage: "Rotate logs daily",
+ },
+ &cli.IntFlag{
+ Name: "max-days",
+ Aliases: []string{"D"},
+ Usage: "Maximum number of daily logs to keep",
+ },
+ &cli.BoolFlag{
+ Name: "compress",
+ Aliases: []string{"z"},
+ Usage: "Compress rotated logs",
+ },
+ &cli.IntFlag{
+ Name: "compression-level",
+ Aliases: []string{"Z"},
+ Usage: "Compression level to use",
},
}...),
Action: runAddFileLogger,
@@ -124,18 +149,25 @@ var (
Name: "conn",
Usage: "Add a net conn logger",
Flags: append(defaultLoggingFlags, []cli.Flag{
- cli.BoolFlag{
- Name: "reconnect-on-message, R",
- Usage: "Reconnect to host for every message",
- }, cli.BoolFlag{
- Name: "reconnect, r",
- Usage: "Reconnect to host when connection is dropped",
- }, cli.StringFlag{
- Name: "protocol, P",
- Usage: "Set protocol to use: tcp, unix, or udp (defaults to tcp)",
- }, cli.StringFlag{
- Name: "address, a",
- Usage: "Host address and port to connect to (defaults to :7020)",
+ &cli.BoolFlag{
+ Name: "reconnect-on-message",
+ Aliases: []string{"R"},
+ Usage: "Reconnect to host for every message",
+ },
+ &cli.BoolFlag{
+ Name: "reconnect",
+ Aliases: []string{"r"},
+ Usage: "Reconnect to host when connection is dropped",
+ },
+ &cli.StringFlag{
+ Name: "protocol",
+ Aliases: []string{"P"},
+ Usage: "Set protocol to use: tcp, unix, or udp (defaults to tcp)",
+ },
+ &cli.StringFlag{
+ Name: "address",
+ Aliases: []string{"a"},
+ Usage: "Host address and port to connect to (defaults to :7020)",
},
}...),
Action: runAddConnLogger,
@@ -145,9 +177,10 @@ var (
Name: "log-sql",
Usage: "Set LogSQL",
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
- }, cli.BoolFlag{
+ },
+ &cli.BoolFlag{
Name: "off",
Usage: "Switch off SQL logging",
},
diff --git a/cmd/migrate.go b/cmd/migrate.go
index efa791bc65..4e4dd45af3 100644
--- a/cmd/migrate.go
+++ b/cmd/migrate.go
@@ -11,11 +11,11 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdMigrate represents the available migrate sub-command.
-var CmdMigrate = cli.Command{
+var CmdMigrate = &cli.Command{
Name: "migrate",
Usage: "Migrate the database",
Description: "This is a command for migrating the database, so that you can run gitea admin create-user before starting the server.",
diff --git a/cmd/migrate_storage.go b/cmd/migrate_storage.go
index 511db6cbf7..7f94e11ea9 100644
--- a/cmd/migrate_storage.go
+++ b/cmd/migrate_storage.go
@@ -20,70 +20,73 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/storage"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdMigrateStorage represents the available migrate storage sub-command.
-var CmdMigrateStorage = cli.Command{
+var CmdMigrateStorage = &cli.Command{
Name: "migrate-storage",
Usage: "Migrate the storage",
Description: "Copies stored files from storage configured in app.ini to parameter-configured storage",
Action: runMigrateStorage,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "type, t",
- Value: "",
- Usage: "Type of stored files to copy. Allowed types: 'attachments', 'lfs', 'avatars', 'repo-avatars', 'repo-archivers', 'packages', 'actions-log'",
+ &cli.StringFlag{
+ Name: "type",
+ Aliases: []string{"t"},
+ Value: "",
+ Usage: "Type of stored files to copy. Allowed types: 'attachments', 'lfs', 'avatars', 'repo-avatars', 'repo-archivers', 'packages', 'actions-log'",
},
- cli.StringFlag{
- Name: "storage, s",
- Value: "",
- Usage: "New storage type: local (default) or minio",
+ &cli.StringFlag{
+ Name: "storage",
+ Aliases: []string{"s"},
+ Value: "",
+ Usage: "New storage type: local (default) or minio",
},
- cli.StringFlag{
- Name: "path, p",
- Value: "",
- Usage: "New storage placement if store is local (leave blank for default)",
+ &cli.StringFlag{
+ Name: "path",
+ Aliases: []string{"p"},
+ Value: "",
+ Usage: "New storage placement if store is local (leave blank for default)",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-endpoint",
Value: "",
Usage: "Minio storage endpoint",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-access-key-id",
Value: "",
Usage: "Minio storage accessKeyID",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-secret-access-key",
Value: "",
Usage: "Minio storage secretAccessKey",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-bucket",
Value: "",
Usage: "Minio storage bucket",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-location",
Value: "",
Usage: "Minio storage location to create bucket",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-base-path",
Value: "",
Usage: "Minio storage base path on the bucket",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "minio-use-ssl",
Usage: "Enable SSL for minio",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "minio-insecure-skip-verify",
Usage: "Skip SSL verification",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "minio-checksum-algorithm",
Value: "",
Usage: "Minio checksum algorithm (default/md5)",
diff --git a/cmd/restore_repo.go b/cmd/restore_repo.go
index c19e28f13d..37b32aa304 100644
--- a/cmd/restore_repo.go
+++ b/cmd/restore_repo.go
@@ -9,38 +9,39 @@ import (
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/setting"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// CmdRestoreRepository represents the available restore a repository sub-command.
-var CmdRestoreRepository = cli.Command{
+var CmdRestoreRepository = &cli.Command{
Name: "restore-repo",
Usage: "Restore the repository from disk",
Description: "This is a command for restoring the repository data.",
Action: runRestoreRepository,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "repo_dir, r",
- Value: "./data",
- Usage: "Repository dir path to restore from",
+ &cli.StringFlag{
+ Name: "repo_dir",
+ Aliases: []string{"r"},
+ Value: "./data",
+ Usage: "Repository dir path to restore from",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "owner_name",
Value: "",
Usage: "Restore destination owner name",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "repo_name",
Value: "",
Usage: "Restore destination repository name",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "units",
Value: "",
Usage: `Which items will be restored, one or more units should be separated as comma.
wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments are allowed. Empty means all units.`,
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "validation",
Usage: "Sanity check the content of the files before trying to load them",
},
diff --git a/cmd/serv.go b/cmd/serv.go
index 6b5cb78667..26fc91a3b7 100644
--- a/cmd/serv.go
+++ b/cmd/serv.go
@@ -32,7 +32,7 @@ import (
"github.com/golang-jwt/jwt/v5"
"github.com/kballard/go-shellquote"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
const (
@@ -40,17 +40,17 @@ const (
)
// CmdServ represents the available serv sub-command.
-var CmdServ = cli.Command{
+var CmdServ = &cli.Command{
Name: "serv",
Usage: "This command should only be called by SSH shell",
Description: "Serv provides access auth for repositories",
Before: PrepareConsoleLoggerLevel(log.FATAL),
Action: runServ,
Flags: []cli.Flag{
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "enable-pprof",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "debug",
},
},
@@ -119,7 +119,7 @@ func fail(ctx context.Context, userMessage, logMsgFmt string, args ...any) error
}
_ = private.SSHLog(ctx, true, logMsg)
}
- return cli.NewExitError("", 1)
+ return cli.Exit("", 1)
}
// handleCliResponseExtra handles the extra response from the cli sub-commands
@@ -130,7 +130,7 @@ func handleCliResponseExtra(extra private.ResponseExtra) error {
_, _ = fmt.Fprintln(os.Stdout, extra.UserMsg)
}
if extra.HasError() {
- return cli.NewExitError(extra.Error, 1)
+ return cli.Exit(extra.Error, 1)
}
return nil
}
@@ -147,20 +147,20 @@ func runServ(c *cli.Context) error {
return nil
}
- if len(c.Args()) < 1 {
+ if c.NArg() < 1 {
if err := cli.ShowSubcommandHelp(c); err != nil {
fmt.Printf("error showing subcommand help: %v\n", err)
}
return nil
}
- keys := strings.Split(c.Args()[0], "-")
+ keys := strings.Split(c.Args().First(), "-")
if len(keys) != 2 || keys[0] != "key" {
- return fail(ctx, "Key ID format error", "Invalid key argument: %s", c.Args()[0])
+ return fail(ctx, "Key ID format error", "Invalid key argument: %s", c.Args().First())
}
keyID, err := strconv.ParseInt(keys[1], 10, 64)
if err != nil {
- return fail(ctx, "Key ID parsing error", "Invalid key argument: %s", c.Args()[1])
+ return fail(ctx, "Key ID parsing error", "Invalid key argument: %s", c.Args().Get(1))
}
cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
diff --git a/cmd/web.go b/cmd/web.go
index 05f3b2ddb2..d9aafb1fa2 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -23,14 +23,14 @@ import (
"code.gitea.io/gitea/routers/install"
"github.com/felixge/fgprof"
- "github.com/urfave/cli"
+ "github.com/urfave/cli/v2"
)
// PIDFile could be set from build tag
var PIDFile = "/run/gitea.pid"
// CmdWeb represents the available web sub-command.
-var CmdWeb = cli.Command{
+var CmdWeb = &cli.Command{
Name: "web",
Usage: "Start Gitea web server",
Description: `Gitea web server is the only thing you need to run,
@@ -38,26 +38,29 @@ and it takes care of all the other things for you`,
Before: PrepareConsoleLoggerLevel(log.INFO),
Action: runWeb,
Flags: []cli.Flag{
- cli.StringFlag{
- Name: "port, p",
- Value: "3000",
- Usage: "Temporary port number to prevent conflict",
+ &cli.StringFlag{
+ Name: "port",
+ Aliases: []string{"p"},
+ Value: "3000",
+ Usage: "Temporary port number to prevent conflict",
},
- cli.StringFlag{
+ &cli.StringFlag{
Name: "install-port",
Value: "3000",
Usage: "Temporary port number to run the install page on to prevent conflict",
},
- cli.StringFlag{
- Name: "pid, P",
- Value: PIDFile,
- Usage: "Custom pid file path",
+ &cli.StringFlag{
+ Name: "pid",
+ Aliases: []string{"P"},
+ Value: PIDFile,
+ Usage: "Custom pid file path",
},
- cli.BoolFlag{
- Name: "quiet, q",
- Usage: "Only display Fatal logging errors until logging is set-up",
+ &cli.BoolFlag{
+ Name: "quiet",
+ Aliases: []string{"q"},
+ Usage: "Only display Fatal logging errors until logging is set-up",
},
- cli.BoolFlag{
+ &cli.BoolFlag{
Name: "verbose",
Usage: "Set initial logging to TRACE level until logging is properly set-up",
},