Permalink
…tore to gitea (#12244) * Dump github/gitlab repository data to a local directory * Fix lint * Adjust directory structure * Allow migration special units * Allow migration ignore release assets * Fix lint * Add restore repository * stage the changes * Merge * Fix lint * Update the interface * Add some restore methods * Finish restore * Add comments * Fix restore * Add a token flag * Fix bug * Fix test * Fix test * Fix bug * Fix bug * Fix lint * Fix restore * refactor downloader * fmt * Fix bug isEnd detection on getIssues * Refactor maxPerPage * Remove unused codes * Remove unused codes * Fix bug * Fix restore * Fix dump * Uploader should not depend downloader * use release attachment name but not id * Fix restore bug * Fix lint * Fix restore bug * Add a method of DownloadFunc for base.Release to make uploader not depend on downloader * fix Release yml marshal * Fix trace information * Fix bug when dump & restore * Save relative path on yml file * Fix bug * Use relative path * Update docs * Use git service string but not int * Recognize clone addr to service type
198 lines (170 sloc)
5.22 KB
// Copyright 2014 The Gogs Authors. All rights reserved. | |
// Copyright 2016 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. | |
// Gitea (git with a cup of tea) is a painless self-hosted Git Service. | |
package main // import "code.gitea.io/gitea" | |
import ( | |
"fmt" | |
"os" | |
"runtime" | |
"strings" | |
"time" | |
"code.gitea.io/gitea/cmd" | |
"code.gitea.io/gitea/modules/log" | |
"code.gitea.io/gitea/modules/setting" | |
// register supported doc types | |
_ "code.gitea.io/gitea/modules/markup/csv" | |
_ "code.gitea.io/gitea/modules/markup/markdown" | |
_ "code.gitea.io/gitea/modules/markup/orgmode" | |
"github.com/urfave/cli" | |
) | |
var ( | |
// Version holds the current Gitea version | |
Version = "development" | |
// Tags holds the build tags used | |
Tags = "" | |
// MakeVersion holds the current Make version if built with make | |
MakeVersion = "" | |
originalAppHelpTemplate = "" | |
originalCommandHelpTemplate = "" | |
originalSubcommandHelpTemplate = "" | |
) | |
func init() { | |
setting.AppVer = Version | |
setting.AppBuiltWith = formatBuiltWith() | |
setting.AppStartTime = time.Now().UTC() | |
// Grab the original help templates | |
originalAppHelpTemplate = cli.AppHelpTemplate | |
originalCommandHelpTemplate = cli.CommandHelpTemplate | |
originalSubcommandHelpTemplate = cli.SubcommandHelpTemplate | |
} | |
func main() { | |
app := cli.NewApp() | |
app.Name = "Gitea" | |
app.Usage = "A painless self-hosted Git service" | |
app.Description = `By default, gitea will start serving using the webserver with no | |
arguments - which can alternatively be run by running the subcommand web.` | |
app.Version = Version + formatBuiltWith() | |
app.Commands = []cli.Command{ | |
cmd.CmdWeb, | |
cmd.CmdServ, | |
cmd.CmdHook, | |
cmd.CmdDump, | |
cmd.CmdCert, | |
cmd.CmdAdmin, | |
cmd.CmdGenerate, | |
cmd.CmdMigrate, | |
cmd.CmdKeys, | |
cmd.CmdConvert, | |
cmd.CmdDoctor, | |
cmd.CmdManager, | |
cmd.Cmdembedded, | |
cmd.CmdMigrateStorage, | |
cmd.CmdDocs, | |
cmd.CmdDumpRepository, | |
cmd.CmdRestoreRepository, | |
} | |
// Now adjust these commands to add our global configuration options | |
// First calculate the default paths and set the AppHelpTemplates in this context | |
setting.SetCustomPathAndConf("", "", "") | |
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, | |
cli.StringFlag{ | |
Name: "work-path, w", | |
Value: setting.AppWorkPath, | |
Usage: "Set the gitea working path", | |
}, | |
} | |
// Set the default to be equivalent to cmdWeb and add the default flags | |
app.Flags = append(app.Flags, cmd.CmdWeb.Flags...) | |
app.Flags = append(app.Flags, defaultFlags...) | |
app.Action = cmd.CmdWeb.Action | |
// 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) | |
} | |
err := app.Run(os.Args) | |
if err != nil { | |
log.Fatal("Failed to run app with %s: %v", os.Args, err) | |
} | |
} | |
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 | |
var providedWorkPath string | |
currentCtx := ctx | |
for { | |
if len(providedCustom) != 0 && len(providedConf) != 0 && len(providedWorkPath) != 0 { | |
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") | |
} | |
if currentCtx.IsSet("work-path") && len(providedWorkPath) == 0 { | |
providedWorkPath = currentCtx.String("work-path") | |
} | |
currentCtx = currentCtx.Parent() | |
} | |
setting.SetCustomPathAndConf(providedCustom, providedConf, providedWorkPath) | |
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) | |
} | |
func formatBuiltWith() string { | |
var version = runtime.Version() | |
if len(MakeVersion) > 0 { | |
version = MakeVersion + ", " + runtime.Version() | |
} | |
if len(Tags) == 0 { | |
return " built with " + version | |
} | |
return " built with " + version + " : " + strings.ReplaceAll(Tags, " ", ", ") | |
} |