2019-03-16 12:12:44 +09:00
|
|
|
// Copyright 2019 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 setting
|
|
|
|
|
|
|
|
import (
|
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
2019-08-24 01:40:30 +09:00
|
|
|
|
|
|
|
"github.com/unknwon/com"
|
2019-03-16 12:12:44 +09:00
|
|
|
)
|
|
|
|
|
|
|
|
// enumerates all the policy repository creating
|
|
|
|
const (
|
|
|
|
RepoCreatingLastUserVisibility = "last"
|
|
|
|
RepoCreatingPrivate = "private"
|
|
|
|
RepoCreatingPublic = "public"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Repository settings
|
|
|
|
var (
|
|
|
|
Repository = struct {
|
|
|
|
AnsiCharset string
|
|
|
|
ForcePrivate bool
|
|
|
|
DefaultPrivate string
|
|
|
|
MaxCreationLimit int
|
|
|
|
MirrorQueueLength int
|
|
|
|
PullRequestQueueLength int
|
|
|
|
PreferredLicenses []string
|
|
|
|
DisableHTTPGit bool
|
|
|
|
AccessControlAllowOrigin string
|
|
|
|
UseCompatSSHURI bool
|
|
|
|
DefaultCloseIssuesViaCommitsInAnyBranch bool
|
|
|
|
|
|
|
|
// Repository editor settings
|
|
|
|
Editor struct {
|
|
|
|
LineWrapExtensions []string
|
|
|
|
PreviewableFileModes []string
|
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Repository upload settings
|
|
|
|
Upload struct {
|
|
|
|
Enabled bool
|
|
|
|
TempPath string
|
|
|
|
AllowedTypes []string `delim:"|"`
|
|
|
|
FileMaxSize int64
|
|
|
|
MaxFiles int
|
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Repository local settings
|
|
|
|
Local struct {
|
|
|
|
LocalCopyPath string
|
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Pull request settings
|
|
|
|
PullRequest struct {
|
|
|
|
WorkInProgressPrefixes []string
|
2019-10-30 21:43:59 +09:00
|
|
|
CloseKeywords []string
|
|
|
|
ReopenKeywords []string
|
2019-03-16 12:12:44 +09:00
|
|
|
} `ini:"repository.pull-request"`
|
|
|
|
|
|
|
|
// Issue Setting
|
|
|
|
Issue struct {
|
|
|
|
LockReasons []string
|
|
|
|
} `ini:"repository.issue"`
|
2019-10-16 22:42:42 +09:00
|
|
|
|
|
|
|
Signing struct {
|
|
|
|
SigningKey string
|
|
|
|
SigningName string
|
|
|
|
SigningEmail string
|
|
|
|
InitialCommit []string
|
|
|
|
CRUDActions []string `ini:"CRUD_ACTIONS"`
|
|
|
|
Merges []string
|
|
|
|
Wiki []string
|
|
|
|
} `ini:"repository.signing"`
|
2019-03-16 12:12:44 +09:00
|
|
|
}{
|
|
|
|
AnsiCharset: "",
|
|
|
|
ForcePrivate: false,
|
|
|
|
DefaultPrivate: RepoCreatingLastUserVisibility,
|
|
|
|
MaxCreationLimit: -1,
|
|
|
|
MirrorQueueLength: 1000,
|
|
|
|
PullRequestQueueLength: 1000,
|
|
|
|
PreferredLicenses: []string{"Apache License 2.0,MIT License"},
|
|
|
|
DisableHTTPGit: false,
|
|
|
|
AccessControlAllowOrigin: "",
|
|
|
|
UseCompatSSHURI: false,
|
|
|
|
DefaultCloseIssuesViaCommitsInAnyBranch: false,
|
|
|
|
|
|
|
|
// Repository editor settings
|
|
|
|
Editor: struct {
|
|
|
|
LineWrapExtensions []string
|
|
|
|
PreviewableFileModes []string
|
|
|
|
}{
|
|
|
|
LineWrapExtensions: strings.Split(".txt,.md,.markdown,.mdown,.mkd,", ","),
|
|
|
|
PreviewableFileModes: []string{"markdown"},
|
|
|
|
},
|
|
|
|
|
|
|
|
// Repository upload settings
|
|
|
|
Upload: struct {
|
|
|
|
Enabled bool
|
|
|
|
TempPath string
|
|
|
|
AllowedTypes []string `delim:"|"`
|
|
|
|
FileMaxSize int64
|
|
|
|
MaxFiles int
|
|
|
|
}{
|
|
|
|
Enabled: true,
|
|
|
|
TempPath: "data/tmp/uploads",
|
|
|
|
AllowedTypes: []string{},
|
|
|
|
FileMaxSize: 3,
|
|
|
|
MaxFiles: 5,
|
|
|
|
},
|
|
|
|
|
|
|
|
// Repository local settings
|
|
|
|
Local: struct {
|
|
|
|
LocalCopyPath string
|
|
|
|
}{
|
|
|
|
LocalCopyPath: "tmp/local-repo",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Pull request settings
|
|
|
|
PullRequest: struct {
|
|
|
|
WorkInProgressPrefixes []string
|
2019-10-30 21:43:59 +09:00
|
|
|
CloseKeywords []string
|
|
|
|
ReopenKeywords []string
|
2019-03-16 12:12:44 +09:00
|
|
|
}{
|
|
|
|
WorkInProgressPrefixes: []string{"WIP:", "[WIP]"},
|
2019-10-30 21:43:59 +09:00
|
|
|
// Same as GitHub. See
|
|
|
|
// https://help.github.com/articles/closing-issues-via-commit-messages
|
|
|
|
CloseKeywords: strings.Split("close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved", ","),
|
|
|
|
ReopenKeywords: strings.Split("reopen,reopens,reopened", ","),
|
2019-03-16 12:12:44 +09:00
|
|
|
},
|
|
|
|
|
|
|
|
// Issue settings
|
|
|
|
Issue: struct {
|
|
|
|
LockReasons []string
|
|
|
|
}{
|
|
|
|
LockReasons: strings.Split("Too heated,Off-topic,Spam,Resolved", ","),
|
|
|
|
},
|
2019-10-16 22:42:42 +09:00
|
|
|
|
|
|
|
// Signing settings
|
|
|
|
Signing: struct {
|
|
|
|
SigningKey string
|
|
|
|
SigningName string
|
|
|
|
SigningEmail string
|
|
|
|
InitialCommit []string
|
|
|
|
CRUDActions []string `ini:"CRUD_ACTIONS"`
|
|
|
|
Merges []string
|
|
|
|
Wiki []string
|
|
|
|
}{
|
|
|
|
SigningKey: "default",
|
|
|
|
SigningName: "",
|
|
|
|
SigningEmail: "",
|
|
|
|
InitialCommit: []string{"always"},
|
|
|
|
CRUDActions: []string{"pubkey", "twofa", "parentsigned"},
|
|
|
|
Merges: []string{"pubkey", "twofa", "basesigned", "commitssigned"},
|
|
|
|
Wiki: []string{"never"},
|
|
|
|
},
|
2019-03-16 12:12:44 +09:00
|
|
|
}
|
|
|
|
RepoRootPath string
|
|
|
|
ScriptType = "bash"
|
|
|
|
)
|
|
|
|
|
|
|
|
func newRepository() {
|
|
|
|
homeDir, err := com.HomeDir()
|
|
|
|
if err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to get home directory: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
}
|
|
|
|
homeDir = strings.Replace(homeDir, "\\", "/", -1)
|
|
|
|
|
|
|
|
// Determine and create root git repository path.
|
|
|
|
sec := Cfg.Section("repository")
|
|
|
|
Repository.DisableHTTPGit = sec.Key("DISABLE_HTTP_GIT").MustBool()
|
|
|
|
Repository.UseCompatSSHURI = sec.Key("USE_COMPAT_SSH_URI").MustBool()
|
|
|
|
Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1)
|
|
|
|
RepoRootPath = sec.Key("ROOT").MustString(path.Join(homeDir, "gitea-repositories"))
|
|
|
|
forcePathSeparator(RepoRootPath)
|
|
|
|
if !filepath.IsAbs(RepoRootPath) {
|
|
|
|
RepoRootPath = filepath.Join(AppWorkPath, RepoRootPath)
|
|
|
|
} else {
|
|
|
|
RepoRootPath = filepath.Clean(RepoRootPath)
|
|
|
|
}
|
|
|
|
ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
|
|
|
|
|
|
|
|
if err = Cfg.Section("repository").MapTo(&Repository); err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to map Repository settings: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
} else if err = Cfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to map Repository.Editor settings: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
} else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to map Repository.Upload settings: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
} else if err = Cfg.Section("repository.local").MapTo(&Repository.Local); err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to map Repository.Local settings: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
} else if err = Cfg.Section("repository.pull-request").MapTo(&Repository.PullRequest); err != nil {
|
2019-04-02 16:48:31 +09:00
|
|
|
log.Fatal("Failed to map Repository.PullRequest settings: %v", err)
|
2019-03-16 12:12:44 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
if !filepath.IsAbs(Repository.Upload.TempPath) {
|
|
|
|
Repository.Upload.TempPath = path.Join(AppWorkPath, Repository.Upload.TempPath)
|
|
|
|
}
|
|
|
|
}
|