2018-01-13 01:16:49 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// Package cmd provides subcommands to the gitea binary - such as "web" or
// "admin".
package cmd
import (
2021-07-14 17:43:13 +03:00
"context"
2018-01-13 01:16:49 +03:00
"errors"
"fmt"
2021-07-14 17:43:13 +03:00
"os"
"os/signal"
2020-10-24 23:38:14 +03:00
"strings"
2021-07-14 17:43:13 +03:00
"syscall"
2018-01-13 01:16:49 +03:00
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2021-12-01 10:50:01 +03:00
"code.gitea.io/gitea/modules/log"
2018-01-13 01:16:49 +03:00
"code.gitea.io/gitea/modules/setting"
2019-01-21 14:45:32 +03:00
"code.gitea.io/gitea/modules/util"
2018-01-13 01:16:49 +03:00
"github.com/urfave/cli"
)
// argsSet checks that all the required arguments are set. args is a list of
// arguments that must be set in the passed Context.
func argsSet ( c * cli . Context , args ... string ) error {
for _ , a := range args {
if ! c . IsSet ( a ) {
return errors . New ( a + " is not set" )
}
2018-12-27 15:38:38 +03:00
2022-03-10 13:11:26 +03:00
if util . IsEmptyString ( c . String ( a ) ) {
2018-12-27 15:38:38 +03:00
return errors . New ( a + " is required" )
}
2018-01-13 01:16:49 +03:00
}
return nil
}
2020-10-24 23:38:14 +03:00
// confirm waits for user input which confirms an action
func confirm ( ) ( bool , error ) {
var response string
_ , err := fmt . Scanln ( & response )
if err != nil {
return false , err
}
switch strings . ToLower ( response ) {
case "y" , "yes" :
return true , nil
case "n" , "no" :
return false , nil
default :
return false , errors . New ( response + " isn't a correct confirmation string" )
}
}
2021-11-07 06:11:27 +03:00
func initDB ( ctx context . Context ) error {
2021-12-01 10:50:01 +03:00
setting . LoadFromExisting ( )
2019-08-24 12:24:45 +03:00
setting . InitDBConfig ( )
2021-12-01 10:50:01 +03:00
setting . NewXORMLogService ( false )
if setting . Database . Type == "" {
log . Fatal ( ` Database settings are missing from the configuration file : % q .
Ensure you are running in the correct environment or set the correct configuration file with - c .
If this is the intended configuration file complete the [ database ] section . ` , setting . CustomConf )
}
2021-11-07 06:11:27 +03:00
if err := db . InitEngine ( ctx ) ; err != nil {
2021-12-01 10:50:01 +03:00
return fmt . Errorf ( "unable to initialise the database using the configuration in %q. Error: %v" , setting . CustomConf , err )
2018-01-13 01:16:49 +03:00
}
return nil
}
2021-07-14 17:43:13 +03:00
func installSignals ( ) ( context . Context , context . CancelFunc ) {
ctx , cancel := context . WithCancel ( context . Background ( ) )
go func ( ) {
// install notify
signalChannel := make ( chan os . Signal , 1 )
signal . Notify (
signalChannel ,
syscall . SIGINT ,
syscall . SIGTERM ,
)
select {
case <- signalChannel :
case <- ctx . Done ( ) :
}
cancel ( )
signal . Reset ( )
} ( )
return ctx , cancel
}