2014-02-19 22:04:31 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
2016-12-21 15:13:17 +03:00
// Copyright 2016 The Gitea Authors. All rights reserved.
2014-02-19 22:04:31 +04:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2014-02-19 13:50:53 +04:00
2016-11-11 16:56:35 +03:00
// Gitea (git with a cup of tea) is a painless self-hosted Git Service.
package main // import "code.gitea.io/gitea"
2014-02-12 21:49:46 +04:00
import (
2019-04-29 21:08:21 +03:00
"fmt"
2014-02-19 13:50:53 +04:00
"os"
2019-01-24 18:22:51 +03:00
"runtime"
2017-02-28 03:40:02 +03:00
"strings"
2020-11-18 01:44:52 +03:00
"time"
2016-12-01 02:56:15 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/cmd"
2017-01-04 16:16:03 +03:00
"code.gitea.io/gitea/modules/log"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/setting"
2018-11-01 16:41:07 +03:00
2017-09-21 08:20:14 +03:00
// register supported doc types
2018-07-21 00:08:15 +03:00
_ "code.gitea.io/gitea/modules/markup/csv"
2017-09-21 08:20:14 +03:00
_ "code.gitea.io/gitea/modules/markup/markdown"
_ "code.gitea.io/gitea/modules/markup/orgmode"
2016-11-04 15:44:23 +03:00
"github.com/urfave/cli"
2014-02-12 21:49:46 +04:00
)
2019-04-02 19:10:11 +03:00
var (
// Version holds the current Gitea version
2020-01-25 16:21:22 +03:00
Version = "development"
2019-04-02 19:10:11 +03:00
// Tags holds the build tags used
Tags = ""
// MakeVersion holds the current Make version if built with make
MakeVersion = ""
2019-04-29 21:08:21 +03:00
originalAppHelpTemplate = ""
originalCommandHelpTemplate = ""
originalSubcommandHelpTemplate = ""
2019-04-02 19:10:11 +03:00
)
2017-02-28 03:40:02 +03:00
2014-02-12 23:54:09 +04:00
func init ( ) {
2016-11-04 14:32:04 +03:00
setting . AppVer = Version
2019-06-12 22:41:28 +03:00
setting . AppBuiltWith = formatBuiltWith ( )
2020-11-18 01:44:52 +03:00
setting . AppStartTime = time . Now ( ) . UTC ( )
2019-04-29 21:08:21 +03:00
// Grab the original help templates
originalAppHelpTemplate = cli . AppHelpTemplate
originalCommandHelpTemplate = cli . CommandHelpTemplate
originalSubcommandHelpTemplate = cli . SubcommandHelpTemplate
2014-02-12 23:54:09 +04:00
}
2014-02-12 21:49:46 +04:00
func main ( ) {
2014-02-19 13:50:53 +04:00
app := cli . NewApp ( )
2016-11-11 16:56:35 +03:00
app . Name = "Gitea"
app . Usage = "A painless self-hosted Git service"
2018-01-10 07:58:08 +03:00
app . Description = ` By default , gitea will start serving using the webserver with no
arguments - which can alternatively be run by running the subcommand web . `
2019-06-12 22:41:28 +03:00
app . Version = Version + formatBuiltWith ( )
2014-02-19 13:50:53 +04:00
app . Commands = [ ] cli . Command {
2014-05-02 05:21:46 +04:00
cmd . CmdWeb ,
cmd . CmdServ ,
2017-02-23 06:40:44 +03:00
cmd . CmdHook ,
2014-06-11 03:11:53 +04:00
cmd . CmdDump ,
2014-09-23 01:30:58 +04:00
cmd . CmdCert ,
2016-08-14 02:11:52 +03:00
cmd . CmdAdmin ,
2018-02-18 21:14:37 +03:00
cmd . CmdGenerate ,
2018-10-31 06:14:42 +03:00
cmd . CmdMigrate ,
2018-11-01 16:41:07 +03:00
cmd . CmdKeys ,
2019-06-08 16:53:45 +03:00
cmd . CmdConvert ,
2020-01-11 17:24:57 +03:00
cmd . CmdDoctor ,
2020-01-29 04:01:06 +03:00
cmd . CmdManager ,
2020-02-02 05:17:44 +03:00
cmd . Cmdembedded ,
2020-08-18 07:23:45 +03:00
cmd . CmdMigrateStorage ,
2020-11-07 03:32:57 +03:00
cmd . CmdDocs ,
2020-12-27 06:34:19 +03:00
cmd . CmdDumpRepository ,
cmd . CmdRestoreRepository ,
2014-02-19 13:50:53 +04:00
}
2019-04-29 21:08:21 +03:00
// Now adjust these commands to add our global configuration options
// First calculate the default paths and set the AppHelpTemplates in this context
2019-05-14 18:20:35 +03:00
setting . SetCustomPathAndConf ( "" , "" , "" )
2019-04-29 21:08:21 +03:00
setAppHelpTemplates ( )
// default configuration flags
defaultFlags := [ ] cli . Flag {
cli . StringFlag {
Name : "custom-path, C" ,
Value : setting . CustomPath ,
Usage : "Custom path file path" ,
} ,
cli . StringFlag {
Name : "config, c" ,
Value : setting . CustomConf ,
Usage : "Custom configuration file path" ,
} ,
cli . VersionFlag ,
2019-05-14 18:20:35 +03:00
cli . StringFlag {
Name : "work-path, w" ,
Value : setting . AppWorkPath ,
Usage : "Set the gitea working path" ,
} ,
2019-04-29 21:08:21 +03:00
}
// Set the default to be equivalent to cmdWeb and add the default flags
2018-11-01 03:36:41 +03:00
app . Flags = append ( app . Flags , cmd . CmdWeb . Flags ... )
2019-04-29 21:08:21 +03:00
app . Flags = append ( app . Flags , defaultFlags ... )
2018-01-10 07:58:08 +03:00
app . Action = cmd . CmdWeb . Action
2019-04-29 21:08:21 +03:00
// Add functions to set these paths and these flags to the commands
app . Before = establishCustomPath
for i := range app . Commands {
setFlagsAndBeforeOnSubcommands ( & app . Commands [ i ] , defaultFlags , establishCustomPath )
}
2016-12-01 02:56:15 +03:00
err := app . Run ( os . Args )
if err != nil {
2019-04-02 10:48:31 +03:00
log . Fatal ( "Failed to run app with %s: %v" , os . Args , err )
2016-12-01 02:56:15 +03:00
}
2014-02-12 21:49:46 +04:00
}
2017-02-28 03:40:02 +03:00
2019-04-29 21:08:21 +03:00
func setFlagsAndBeforeOnSubcommands ( command * cli . Command , defaultFlags [ ] cli . Flag , before cli . BeforeFunc ) {
command . Flags = append ( command . Flags , defaultFlags ... )
command . Before = establishCustomPath
for i := range command . Subcommands {
setFlagsAndBeforeOnSubcommands ( & command . Subcommands [ i ] , defaultFlags , before )
}
}
func establishCustomPath ( ctx * cli . Context ) error {
var providedCustom string
var providedConf string
2019-05-14 18:20:35 +03:00
var providedWorkPath string
2019-04-29 21:08:21 +03:00
currentCtx := ctx
for {
2019-05-14 18:20:35 +03:00
if len ( providedCustom ) != 0 && len ( providedConf ) != 0 && len ( providedWorkPath ) != 0 {
2019-04-29 21:08:21 +03:00
break
}
if currentCtx == nil {
break
}
if currentCtx . IsSet ( "custom-path" ) && len ( providedCustom ) == 0 {
providedCustom = currentCtx . String ( "custom-path" )
}
if currentCtx . IsSet ( "config" ) && len ( providedConf ) == 0 {
providedConf = currentCtx . String ( "config" )
}
2019-05-14 18:20:35 +03:00
if currentCtx . IsSet ( "work-path" ) && len ( providedWorkPath ) == 0 {
providedWorkPath = currentCtx . String ( "work-path" )
}
2019-04-29 21:08:21 +03:00
currentCtx = currentCtx . Parent ( )
}
2019-05-14 18:20:35 +03:00
setting . SetCustomPathAndConf ( providedCustom , providedConf , providedWorkPath )
2019-04-29 21:08:21 +03:00
setAppHelpTemplates ( )
if ctx . IsSet ( "version" ) {
cli . ShowVersion ( ctx )
os . Exit ( 0 )
}
return nil
}
func setAppHelpTemplates ( ) {
cli . AppHelpTemplate = adjustHelpTemplate ( originalAppHelpTemplate )
cli . CommandHelpTemplate = adjustHelpTemplate ( originalCommandHelpTemplate )
cli . SubcommandHelpTemplate = adjustHelpTemplate ( originalSubcommandHelpTemplate )
}
func adjustHelpTemplate ( originalTemplate string ) string {
overrided := ""
if _ , ok := os . LookupEnv ( "GITEA_CUSTOM" ) ; ok {
overrided = "(GITEA_CUSTOM)"
}
return fmt . Sprintf ( ` % s
DEFAULT CONFIGURATION :
CustomPath : % s % s
CustomConf : % s
AppPath : % s
AppWorkPath : % s
` , originalTemplate , setting . CustomPath , overrided , setting . CustomConf , setting . AppPath , setting . AppWorkPath )
}
2019-06-12 22:41:28 +03:00
func formatBuiltWith ( ) string {
2019-04-02 19:10:11 +03:00
var version = runtime . Version ( )
if len ( MakeVersion ) > 0 {
version = MakeVersion + ", " + runtime . Version ( )
}
2017-02-28 03:40:02 +03:00
if len ( Tags ) == 0 {
2019-04-02 19:10:11 +03:00
return " built with " + version
2017-02-28 03:40:02 +03:00
}
2020-10-11 23:27:20 +03:00
return " built with " + version + " : " + strings . ReplaceAll ( Tags , " " , ", " )
2017-02-28 03:40:02 +03:00
}