2019-03-16 04:12:44 +01:00
|
|
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
2022-11-27 19:20:29 +01:00
|
|
|
// SPDX-License-Identifier: MIT
|
2019-03-16 04:12:44 +01:00
|
|
|
|
|
|
|
package setting
|
|
|
|
|
|
|
|
import (
|
2022-01-30 17:33:36 +01:00
|
|
|
"os/exec"
|
2019-03-16 04:12:44 +01:00
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
|
|
)
|
|
|
|
|
|
|
|
// enumerates all the policy repository creating
|
|
|
|
const (
|
|
|
|
RepoCreatingLastUserVisibility = "last"
|
|
|
|
RepoCreatingPrivate = "private"
|
|
|
|
RepoCreatingPublic = "public"
|
|
|
|
)
|
|
|
|
|
2024-03-07 09:30:12 +01:00
|
|
|
// MaxUserCardsPerPage sets maximum amount of watchers and stargazers shown per page
|
|
|
|
// those pages use 2 or 3 column layout, so the value should be divisible by 2 and 3
|
2024-03-10 13:15:59 +01:00
|
|
|
var MaxUserCardsPerPage = 36
|
2024-03-07 09:30:12 +01:00
|
|
|
|
|
|
|
// MaxForksPerPage sets maximum amount of forks shown per page
|
2024-03-10 13:15:59 +01:00
|
|
|
var MaxForksPerPage = 40
|
2022-06-12 17:51:54 +02:00
|
|
|
|
2019-03-16 04:12:44 +01:00
|
|
|
// Repository settings
|
|
|
|
var (
|
|
|
|
Repository = struct {
|
2020-06-03 00:20:19 +02:00
|
|
|
DetectedCharsetsOrder []string
|
|
|
|
DetectedCharsetScore map[string]int `ini:"-"`
|
2019-03-16 04:12:44 +01:00
|
|
|
AnsiCharset string
|
|
|
|
ForcePrivate bool
|
|
|
|
DefaultPrivate string
|
2020-09-27 21:20:52 +02:00
|
|
|
DefaultPushCreatePrivate bool
|
2019-03-16 04:12:44 +01:00
|
|
|
MaxCreationLimit int
|
|
|
|
PreferredLicenses []string
|
|
|
|
DisableHTTPGit bool
|
|
|
|
AccessControlAllowOrigin string
|
|
|
|
UseCompatSSHURI bool
|
2023-05-12 11:44:37 +02:00
|
|
|
GoGetCloneURLProtocol string
|
2019-03-16 04:12:44 +01:00
|
|
|
DefaultCloseIssuesViaCommitsInAnyBranch bool
|
2019-12-15 03:49:52 +01:00
|
|
|
EnablePushCreateUser bool
|
|
|
|
EnablePushCreateOrg bool
|
2020-01-17 08:34:37 +01:00
|
|
|
DisabledRepoUnits []string
|
|
|
|
DefaultRepoUnits []string
|
2023-02-04 07:48:38 +01:00
|
|
|
DefaultForkRepoUnits []string
|
2020-01-23 00:46:46 +01:00
|
|
|
PrefixArchiveFiles bool
|
2020-12-21 15:39:41 +01:00
|
|
|
DisableMigrations bool
|
2024-02-26 09:22:51 +01:00
|
|
|
DisableStars bool
|
2024-02-25 11:58:23 +01:00
|
|
|
DisableForks bool
|
2020-06-17 22:53:55 +02:00
|
|
|
DefaultBranch string
|
2020-09-25 06:09:23 +02:00
|
|
|
AllowAdoptionOfUnadoptedRepositories bool
|
|
|
|
AllowDeleteOfUnadoptedRepositories bool
|
2022-07-31 18:57:02 +02:00
|
|
|
DisableDownloadSourceArchives bool
|
2022-12-27 22:21:14 +01:00
|
|
|
AllowForkWithoutMaximumLimit bool
|
2019-03-16 04:12:44 +01:00
|
|
|
|
|
|
|
// Repository editor settings
|
|
|
|
Editor struct {
|
2023-03-24 07:12:23 +01:00
|
|
|
LineWrapExtensions []string
|
2019-03-16 04:12:44 +01:00
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Repository upload settings
|
|
|
|
Upload struct {
|
|
|
|
Enabled bool
|
|
|
|
TempPath string
|
2020-10-05 07:49:33 +02:00
|
|
|
AllowedTypes string
|
2019-03-16 04:12:44 +01:00
|
|
|
FileMaxSize int64
|
|
|
|
MaxFiles int
|
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Repository local settings
|
|
|
|
Local struct {
|
|
|
|
LocalCopyPath string
|
|
|
|
} `ini:"-"`
|
|
|
|
|
|
|
|
// Pull request settings
|
|
|
|
PullRequest struct {
|
2019-12-31 00:34:11 +01:00
|
|
|
WorkInProgressPrefixes []string
|
|
|
|
CloseKeywords []string
|
|
|
|
ReopenKeywords []string
|
2022-06-03 05:45:54 +02:00
|
|
|
DefaultMergeStyle string
|
2019-12-31 00:34:11 +01:00
|
|
|
DefaultMergeMessageCommitsLimit int
|
|
|
|
DefaultMergeMessageSize int
|
|
|
|
DefaultMergeMessageAllAuthors bool
|
|
|
|
DefaultMergeMessageMaxApprovers int
|
|
|
|
DefaultMergeMessageOfficialApproversOnly bool
|
2021-06-19 00:08:22 +02:00
|
|
|
PopulateSquashCommentWithCommitMessages bool
|
2021-11-29 08:09:55 +01:00
|
|
|
AddCoCommitterTrailers bool
|
2022-12-19 12:37:15 +01:00
|
|
|
TestConflictingPatchesWithGitApply bool
|
2024-01-17 01:44:56 +01:00
|
|
|
RetargetChildrenOnMerge bool
|
2019-03-16 04:12:44 +01:00
|
|
|
} `ini:"repository.pull-request"`
|
|
|
|
|
|
|
|
// Issue Setting
|
|
|
|
Issue struct {
|
|
|
|
LockReasons []string
|
2023-05-25 15:17:19 +02:00
|
|
|
MaxPinned int
|
2019-03-16 04:12:44 +01:00
|
|
|
} `ini:"repository.issue"`
|
2019-10-16 15:42:42 +02:00
|
|
|
|
2020-10-05 07:49:33 +02:00
|
|
|
Release struct {
|
2021-08-29 18:25:16 +02:00
|
|
|
AllowedTypes string
|
|
|
|
DefaultPagingNum int
|
2020-10-05 07:49:33 +02:00
|
|
|
} `ini:"repository.release"`
|
|
|
|
|
2019-10-16 15:42:42 +02:00
|
|
|
Signing struct {
|
2020-09-19 18:44:55 +02:00
|
|
|
SigningKey string
|
|
|
|
SigningName string
|
|
|
|
SigningEmail string
|
|
|
|
InitialCommit []string
|
|
|
|
CRUDActions []string `ini:"CRUD_ACTIONS"`
|
|
|
|
Merges []string
|
|
|
|
Wiki []string
|
|
|
|
DefaultTrustModel string
|
2019-10-16 15:42:42 +02:00
|
|
|
} `ini:"repository.signing"`
|
[FEAT] Repository flags
This implements "repository flags", a way for instance administrators to
assign custom flags to repositories. The idea is that custom templates
can look at these flags, and display banners based on them, Forgejo does
not provide anything built on top of it, just the foundation. The
feature is optional, and disabled by default. To enable it, set
`[repository].ENABLE_FLAGS = true`.
On the UI side, instance administrators will see a new "Manage flags"
tab on repositories, and a list of enabled tags (if any) on the
repository home page. The "Manage flags" page allows them to remove
existing flags, or add any new ones that are listed in
`[repository].SETTABLE_FLAGS`.
The model does not enforce that only the `SETTABLE_FLAGS` are present.
If the setting is changed, old flags may remain present in the database,
and anything that uses them, will still work. The repository flag
management page will allow an instance administrator to remove them, but
not set them, once removed.
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
(cherry picked from commit ba735ce2228f8dd7ca105e94b9baa1be058ebe37)
(cherry picked from commit f09f6e029b4fb2714b86cd32dc19255078ecc0ee)
(cherry picked from commit 2f8b0414892f6099f519bda63a9e0fbc8ba6cfc7)
(cherry picked from commit d3186ee5f41fac896c7d2341402fcd39dd250bf1)
2024-01-04 14:28:19 +01:00
|
|
|
|
|
|
|
SettableFlags []string
|
|
|
|
EnableFlags bool
|
2019-03-16 04:12:44 +01:00
|
|
|
}{
|
2020-06-03 00:20:19 +02:00
|
|
|
DetectedCharsetsOrder: []string{
|
|
|
|
"UTF-8",
|
|
|
|
"UTF-16BE",
|
|
|
|
"UTF-16LE",
|
|
|
|
"UTF-32BE",
|
|
|
|
"UTF-32LE",
|
|
|
|
"ISO-8859-1",
|
|
|
|
"windows-1252",
|
|
|
|
"ISO-8859-2",
|
|
|
|
"windows-1250",
|
|
|
|
"ISO-8859-5",
|
|
|
|
"ISO-8859-6",
|
|
|
|
"ISO-8859-7",
|
|
|
|
"windows-1253",
|
|
|
|
"ISO-8859-8-I",
|
|
|
|
"windows-1255",
|
|
|
|
"ISO-8859-8",
|
|
|
|
"windows-1251",
|
|
|
|
"windows-1256",
|
|
|
|
"KOI8-R",
|
|
|
|
"ISO-8859-9",
|
|
|
|
"windows-1254",
|
|
|
|
"Shift_JIS",
|
|
|
|
"GB18030",
|
|
|
|
"EUC-JP",
|
|
|
|
"EUC-KR",
|
|
|
|
"Big5",
|
|
|
|
"ISO-2022-JP",
|
|
|
|
"ISO-2022-KR",
|
|
|
|
"ISO-2022-CN",
|
|
|
|
"IBM424_rtl",
|
|
|
|
"IBM424_ltr",
|
|
|
|
"IBM420_rtl",
|
|
|
|
"IBM420_ltr",
|
|
|
|
},
|
|
|
|
DetectedCharsetScore: map[string]int{},
|
2019-03-16 04:12:44 +01:00
|
|
|
AnsiCharset: "",
|
|
|
|
ForcePrivate: false,
|
|
|
|
DefaultPrivate: RepoCreatingLastUserVisibility,
|
2020-09-27 21:20:52 +02:00
|
|
|
DefaultPushCreatePrivate: true,
|
2019-03-16 04:12:44 +01:00
|
|
|
MaxCreationLimit: -1,
|
2023-12-05 22:32:11 +01:00
|
|
|
PreferredLicenses: []string{"Apache-2.0", "MIT"},
|
2019-03-16 04:12:44 +01:00
|
|
|
DisableHTTPGit: false,
|
|
|
|
AccessControlAllowOrigin: "",
|
Change the default SSH clone url to the ssh:// style
Rather than using an scp-style URI, use the same URL style for SSH
clones as for HTTP(S) ones. This is not only more consistent, but the
URL style allows one to specify a port, and makes it clear that it is an
SSH clone URL.
git itself favours the URL style, and mentions the scp-style in passing
only. Said style is prominently used by GitHub, and might be more
familiar for a lot of people, but other than familiarity, it has no
advantage over the URL style.
For the benefit of consistency, and flexibility, lets flip the default,
and make it the URL style. Instance admins who prefer to use the
scp-style, and are running SSH on its standard port, can change the
setting back to false.
This addresses #3193.
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-04-17 11:04:48 +02:00
|
|
|
UseCompatSSHURI: true,
|
2019-03-16 04:12:44 +01:00
|
|
|
DefaultCloseIssuesViaCommitsInAnyBranch: false,
|
2019-12-15 03:49:52 +01:00
|
|
|
EnablePushCreateUser: false,
|
|
|
|
EnablePushCreateOrg: false,
|
2020-01-17 08:34:37 +01:00
|
|
|
DisabledRepoUnits: []string{},
|
|
|
|
DefaultRepoUnits: []string{},
|
2023-02-04 07:48:38 +01:00
|
|
|
DefaultForkRepoUnits: []string{},
|
2020-01-23 00:46:46 +01:00
|
|
|
PrefixArchiveFiles: true,
|
2020-12-21 15:39:41 +01:00
|
|
|
DisableMigrations: false,
|
2021-04-15 18:53:57 +02:00
|
|
|
DisableStars: false,
|
2024-02-25 11:58:23 +01:00
|
|
|
DisableForks: false,
|
2022-04-09 06:26:48 +02:00
|
|
|
DefaultBranch: "main",
|
2022-12-27 22:21:14 +01:00
|
|
|
AllowForkWithoutMaximumLimit: true,
|
2019-03-16 04:12:44 +01:00
|
|
|
|
|
|
|
// Repository editor settings
|
|
|
|
Editor: struct {
|
2023-03-24 07:12:23 +01:00
|
|
|
LineWrapExtensions []string
|
2019-03-16 04:12:44 +01:00
|
|
|
}{
|
2023-04-26 17:22:54 +02:00
|
|
|
LineWrapExtensions: strings.Split(".txt,.md,.markdown,.mdown,.mkd,.livemd,", ","),
|
2019-03-16 04:12:44 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Repository upload settings
|
|
|
|
Upload: struct {
|
|
|
|
Enabled bool
|
|
|
|
TempPath string
|
2020-10-05 07:49:33 +02:00
|
|
|
AllowedTypes string
|
2019-03-16 04:12:44 +01:00
|
|
|
FileMaxSize int64
|
|
|
|
MaxFiles int
|
|
|
|
}{
|
|
|
|
Enabled: true,
|
|
|
|
TempPath: "data/tmp/uploads",
|
2020-10-05 07:49:33 +02:00
|
|
|
AllowedTypes: "",
|
2023-11-17 12:42:00 +01:00
|
|
|
FileMaxSize: 50,
|
2019-03-16 04:12:44 +01:00
|
|
|
MaxFiles: 5,
|
|
|
|
},
|
|
|
|
|
|
|
|
// Repository local settings
|
|
|
|
Local: struct {
|
|
|
|
LocalCopyPath string
|
|
|
|
}{
|
|
|
|
LocalCopyPath: "tmp/local-repo",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Pull request settings
|
|
|
|
PullRequest: struct {
|
2019-12-31 00:34:11 +01:00
|
|
|
WorkInProgressPrefixes []string
|
|
|
|
CloseKeywords []string
|
|
|
|
ReopenKeywords []string
|
2022-06-03 05:45:54 +02:00
|
|
|
DefaultMergeStyle string
|
2019-12-31 00:34:11 +01:00
|
|
|
DefaultMergeMessageCommitsLimit int
|
|
|
|
DefaultMergeMessageSize int
|
|
|
|
DefaultMergeMessageAllAuthors bool
|
|
|
|
DefaultMergeMessageMaxApprovers int
|
|
|
|
DefaultMergeMessageOfficialApproversOnly bool
|
2021-06-19 00:08:22 +02:00
|
|
|
PopulateSquashCommentWithCommitMessages bool
|
2021-11-29 08:09:55 +01:00
|
|
|
AddCoCommitterTrailers bool
|
2022-12-19 12:37:15 +01:00
|
|
|
TestConflictingPatchesWithGitApply bool
|
2024-01-17 01:44:56 +01:00
|
|
|
RetargetChildrenOnMerge bool
|
2019-03-16 04:12:44 +01:00
|
|
|
}{
|
|
|
|
WorkInProgressPrefixes: []string{"WIP:", "[WIP]"},
|
2019-10-30 13:43:59 +01:00
|
|
|
// Same as GitHub. See
|
|
|
|
// https://help.github.com/articles/closing-issues-via-commit-messages
|
2019-12-31 00:34:11 +01:00
|
|
|
CloseKeywords: strings.Split("close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved", ","),
|
|
|
|
ReopenKeywords: strings.Split("reopen,reopens,reopened", ","),
|
2022-06-03 05:45:54 +02:00
|
|
|
DefaultMergeStyle: "merge",
|
2019-12-31 00:34:11 +01:00
|
|
|
DefaultMergeMessageCommitsLimit: 50,
|
|
|
|
DefaultMergeMessageSize: 5 * 1024,
|
|
|
|
DefaultMergeMessageAllAuthors: false,
|
|
|
|
DefaultMergeMessageMaxApprovers: 10,
|
|
|
|
DefaultMergeMessageOfficialApproversOnly: true,
|
2021-06-19 00:08:22 +02:00
|
|
|
PopulateSquashCommentWithCommitMessages: false,
|
2021-11-29 08:09:55 +01:00
|
|
|
AddCoCommitterTrailers: true,
|
2024-01-17 01:44:56 +01:00
|
|
|
RetargetChildrenOnMerge: true,
|
2019-03-16 04:12:44 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Issue settings
|
|
|
|
Issue: struct {
|
|
|
|
LockReasons []string
|
2023-05-25 15:17:19 +02:00
|
|
|
MaxPinned int
|
2019-03-16 04:12:44 +01:00
|
|
|
}{
|
|
|
|
LockReasons: strings.Split("Too heated,Off-topic,Spam,Resolved", ","),
|
2023-05-25 15:17:19 +02:00
|
|
|
MaxPinned: 3,
|
2019-03-16 04:12:44 +01:00
|
|
|
},
|
2019-10-16 15:42:42 +02:00
|
|
|
|
2020-10-05 07:49:33 +02:00
|
|
|
Release: struct {
|
2021-08-29 18:25:16 +02:00
|
|
|
AllowedTypes string
|
|
|
|
DefaultPagingNum int
|
2020-10-05 07:49:33 +02:00
|
|
|
}{
|
2021-08-29 18:25:16 +02:00
|
|
|
AllowedTypes: "",
|
|
|
|
DefaultPagingNum: 10,
|
2020-10-05 07:49:33 +02:00
|
|
|
},
|
|
|
|
|
2019-10-16 15:42:42 +02:00
|
|
|
// Signing settings
|
|
|
|
Signing: struct {
|
2020-09-19 18:44:55 +02:00
|
|
|
SigningKey string
|
|
|
|
SigningName string
|
|
|
|
SigningEmail string
|
|
|
|
InitialCommit []string
|
|
|
|
CRUDActions []string `ini:"CRUD_ACTIONS"`
|
|
|
|
Merges []string
|
|
|
|
Wiki []string
|
|
|
|
DefaultTrustModel string
|
2019-10-16 15:42:42 +02:00
|
|
|
}{
|
2020-09-19 18:44:55 +02:00
|
|
|
SigningKey: "default",
|
|
|
|
SigningName: "",
|
|
|
|
SigningEmail: "",
|
|
|
|
InitialCommit: []string{"always"},
|
|
|
|
CRUDActions: []string{"pubkey", "twofa", "parentsigned"},
|
|
|
|
Merges: []string{"pubkey", "twofa", "basesigned", "commitssigned"},
|
|
|
|
Wiki: []string{"never"},
|
|
|
|
DefaultTrustModel: "collaborator",
|
2019-10-16 15:42:42 +02:00
|
|
|
},
|
[FEAT] Repository flags
This implements "repository flags", a way for instance administrators to
assign custom flags to repositories. The idea is that custom templates
can look at these flags, and display banners based on them, Forgejo does
not provide anything built on top of it, just the foundation. The
feature is optional, and disabled by default. To enable it, set
`[repository].ENABLE_FLAGS = true`.
On the UI side, instance administrators will see a new "Manage flags"
tab on repositories, and a list of enabled tags (if any) on the
repository home page. The "Manage flags" page allows them to remove
existing flags, or add any new ones that are listed in
`[repository].SETTABLE_FLAGS`.
The model does not enforce that only the `SETTABLE_FLAGS` are present.
If the setting is changed, old flags may remain present in the database,
and anything that uses them, will still work. The repository flag
management page will allow an instance administrator to remove them, but
not set them, once removed.
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
(cherry picked from commit ba735ce2228f8dd7ca105e94b9baa1be058ebe37)
(cherry picked from commit f09f6e029b4fb2714b86cd32dc19255078ecc0ee)
(cherry picked from commit 2f8b0414892f6099f519bda63a9e0fbc8ba6cfc7)
(cherry picked from commit d3186ee5f41fac896c7d2341402fcd39dd250bf1)
2024-01-04 14:28:19 +01:00
|
|
|
|
|
|
|
EnableFlags: false,
|
2019-03-16 04:12:44 +01:00
|
|
|
}
|
|
|
|
RepoRootPath string
|
|
|
|
ScriptType = "bash"
|
|
|
|
)
|
|
|
|
|
2023-02-19 17:12:01 +01:00
|
|
|
func loadRepositoryFrom(rootCfg ConfigProvider) {
|
2020-12-15 22:52:59 +01:00
|
|
|
var err error
|
2019-03-16 04:12:44 +01:00
|
|
|
// Determine and create root git repository path.
|
2023-02-19 17:12:01 +01:00
|
|
|
sec := rootCfg.Section("repository")
|
2019-03-16 04:12:44 +01:00
|
|
|
Repository.DisableHTTPGit = sec.Key("DISABLE_HTTP_GIT").MustBool()
|
|
|
|
Repository.UseCompatSSHURI = sec.Key("USE_COMPAT_SSH_URI").MustBool()
|
2023-05-12 11:44:37 +02:00
|
|
|
Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https")
|
2019-03-16 04:12:44 +01:00
|
|
|
Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1)
|
2020-09-25 06:09:23 +02:00
|
|
|
Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch)
|
2022-12-19 21:01:46 +01:00
|
|
|
RepoRootPath = sec.Key("ROOT").MustString(path.Join(AppDataPath, "forgejo-repositories"))
|
2019-03-16 04:12:44 +01:00
|
|
|
if !filepath.IsAbs(RepoRootPath) {
|
|
|
|
RepoRootPath = filepath.Join(AppWorkPath, RepoRootPath)
|
|
|
|
} else {
|
|
|
|
RepoRootPath = filepath.Clean(RepoRootPath)
|
|
|
|
}
|
2020-06-03 00:20:19 +02:00
|
|
|
defaultDetectedCharsetsOrder := make([]string, 0, len(Repository.DetectedCharsetsOrder))
|
|
|
|
for _, charset := range Repository.DetectedCharsetsOrder {
|
|
|
|
defaultDetectedCharsetsOrder = append(defaultDetectedCharsetsOrder, strings.ToLower(strings.TrimSpace(charset)))
|
|
|
|
}
|
2019-03-16 04:12:44 +01:00
|
|
|
ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
|
|
|
|
|
2022-01-30 17:33:36 +01:00
|
|
|
if _, err := exec.LookPath(ScriptType); err != nil {
|
|
|
|
log.Warn("SCRIPT_TYPE %q is not on the current PATH. Are you sure that this is the correct SCRIPT_TYPE?", ScriptType)
|
|
|
|
}
|
|
|
|
|
2023-02-19 17:12:01 +01:00
|
|
|
if err = sec.MapTo(&Repository); err != nil {
|
2019-04-02 09:48:31 +02:00
|
|
|
log.Fatal("Failed to map Repository settings: %v", err)
|
2023-02-19 17:12:01 +01:00
|
|
|
} else if err = rootCfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil {
|
2019-04-02 09:48:31 +02:00
|
|
|
log.Fatal("Failed to map Repository.Editor settings: %v", err)
|
2023-02-19 17:12:01 +01:00
|
|
|
} else if err = rootCfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil {
|
2019-04-02 09:48:31 +02:00
|
|
|
log.Fatal("Failed to map Repository.Upload settings: %v", err)
|
2023-02-19 17:12:01 +01:00
|
|
|
} else if err = rootCfg.Section("repository.local").MapTo(&Repository.Local); err != nil {
|
2019-04-02 09:48:31 +02:00
|
|
|
log.Fatal("Failed to map Repository.Local settings: %v", err)
|
2023-02-19 17:12:01 +01:00
|
|
|
} else if err = rootCfg.Section("repository.pull-request").MapTo(&Repository.PullRequest); err != nil {
|
2019-04-02 09:48:31 +02:00
|
|
|
log.Fatal("Failed to map Repository.PullRequest settings: %v", err)
|
2019-03-16 04:12:44 +01:00
|
|
|
}
|
|
|
|
|
2023-05-19 13:35:12 +02:00
|
|
|
if !rootCfg.Section("packages").Key("ENABLED").MustBool(Packages.Enabled) {
|
2022-05-08 17:51:50 +02:00
|
|
|
Repository.DisabledRepoUnits = append(Repository.DisabledRepoUnits, "repo.packages")
|
|
|
|
}
|
|
|
|
|
2023-05-19 13:35:12 +02:00
|
|
|
if !rootCfg.Section("actions").Key("ENABLED").MustBool(Actions.Enabled) {
|
2023-05-05 14:02:30 +02:00
|
|
|
Repository.DisabledRepoUnits = append(Repository.DisabledRepoUnits, "repo.actions")
|
|
|
|
}
|
|
|
|
|
2020-09-19 18:44:55 +02:00
|
|
|
// Handle default trustmodel settings
|
|
|
|
Repository.Signing.DefaultTrustModel = strings.ToLower(strings.TrimSpace(Repository.Signing.DefaultTrustModel))
|
|
|
|
if Repository.Signing.DefaultTrustModel == "default" {
|
|
|
|
Repository.Signing.DefaultTrustModel = "collaborator"
|
|
|
|
}
|
|
|
|
|
|
|
|
// Handle preferred charset orders
|
2020-06-03 00:20:19 +02:00
|
|
|
preferred := make([]string, 0, len(Repository.DetectedCharsetsOrder))
|
|
|
|
for _, charset := range Repository.DetectedCharsetsOrder {
|
|
|
|
canonicalCharset := strings.ToLower(strings.TrimSpace(charset))
|
|
|
|
preferred = append(preferred, canonicalCharset)
|
|
|
|
// remove it from the defaults
|
|
|
|
for i, charset := range defaultDetectedCharsetsOrder {
|
|
|
|
if charset == canonicalCharset {
|
|
|
|
defaultDetectedCharsetsOrder = append(defaultDetectedCharsetsOrder[:i], defaultDetectedCharsetsOrder[i+1:]...)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
i := 0
|
|
|
|
for _, charset := range preferred {
|
|
|
|
// Add the defaults
|
|
|
|
if charset == "defaults" {
|
|
|
|
for _, charset := range defaultDetectedCharsetsOrder {
|
|
|
|
canonicalCharset := strings.ToLower(strings.TrimSpace(charset))
|
|
|
|
if _, has := Repository.DetectedCharsetScore[canonicalCharset]; !has {
|
|
|
|
Repository.DetectedCharsetScore[canonicalCharset] = i
|
|
|
|
i++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if _, has := Repository.DetectedCharsetScore[charset]; !has {
|
|
|
|
Repository.DetectedCharsetScore[charset] = i
|
|
|
|
i++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-16 04:12:44 +01:00
|
|
|
if !filepath.IsAbs(Repository.Upload.TempPath) {
|
|
|
|
Repository.Upload.TempPath = path.Join(AppWorkPath, Repository.Upload.TempPath)
|
|
|
|
}
|
2021-06-23 23:12:38 +02:00
|
|
|
|
2023-06-14 05:42:38 +02:00
|
|
|
if err := loadRepoArchiveFrom(rootCfg); err != nil {
|
|
|
|
log.Fatal("loadRepoArchiveFrom: %v", err)
|
|
|
|
}
|
[FEAT] Repository flags
This implements "repository flags", a way for instance administrators to
assign custom flags to repositories. The idea is that custom templates
can look at these flags, and display banners based on them, Forgejo does
not provide anything built on top of it, just the foundation. The
feature is optional, and disabled by default. To enable it, set
`[repository].ENABLE_FLAGS = true`.
On the UI side, instance administrators will see a new "Manage flags"
tab on repositories, and a list of enabled tags (if any) on the
repository home page. The "Manage flags" page allows them to remove
existing flags, or add any new ones that are listed in
`[repository].SETTABLE_FLAGS`.
The model does not enforce that only the `SETTABLE_FLAGS` are present.
If the setting is changed, old flags may remain present in the database,
and anything that uses them, will still work. The repository flag
management page will allow an instance administrator to remove them, but
not set them, once removed.
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
(cherry picked from commit ba735ce2228f8dd7ca105e94b9baa1be058ebe37)
(cherry picked from commit f09f6e029b4fb2714b86cd32dc19255078ecc0ee)
(cherry picked from commit 2f8b0414892f6099f519bda63a9e0fbc8ba6cfc7)
(cherry picked from commit d3186ee5f41fac896c7d2341402fcd39dd250bf1)
2024-01-04 14:28:19 +01:00
|
|
|
Repository.EnableFlags = sec.Key("ENABLE_FLAGS").MustBool()
|
2019-03-16 04:12:44 +01:00
|
|
|
}
|